免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 19638 | 回复: 10
打印 上一主题 下一主题

shell如何只输出第一行和最后一行(已解决) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-29 14:47 |只看该作者 |倒序浏览
我grep xxx xxx.file | awk '{print $4}' | sort -n -k1 后生成的结果,我只想输出第一和最后一行,不知道shell能不能直接完成?

[ 本帖最后由 Darkcoming 于 2007-5-29 15:34 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-05-29 15:05 |只看该作者
try
  1. grep xxx xxx.file |awk 'NR==1 && $0=$4 END { print $4; }'
复制代码

论坛徽章:
0
3 [报告]
发表于 2007-05-29 15:12 |只看该作者
报错:
awk: syntax error near line 1
awk: bailing out near line 1
我用的是solaris 8

论坛徽章:
0
4 [报告]
发表于 2007-05-29 15:16 |只看该作者
2楼的仁兄,我没看懂你shell的意思,貌似和我想要的不一样,我把我想要的重新写了一遍

论坛徽章:
0
5 [报告]
发表于 2007-05-29 15:20 |只看该作者
原帖由 Darkcoming 于 2007-5-29 14:47 发表
我grep xxx xxx.file | awk '{print $4}' | sort -n -k1 后生成的结果,我只想输出第一和最后一行,不知道shell能不能直接完成?


  1. awk '$0~/xxx/{print $4}' xxx.file | sort -n -k1 | sed -n '1p;$p;'
复制代码

论坛徽章:
0
6 [报告]
发表于 2007-05-29 15:26 |只看该作者
谢谢5楼,过去没怎么用过sed,多谢指教

论坛徽章:
0
7 [报告]
发表于 2007-05-29 15:42 |只看该作者
不客气。呵呵。
其实你这个问题用awk一个命令就可以解决。
可以在awk脚本内部比较,最后输出两个极值。

论坛徽章:
0
8 [报告]
发表于 2007-05-29 15:50 |只看该作者
举个例子。
假设你的文件的$4是个数字型的子段。

可以

  1. awk 'BEGIN{
  2.             #min也是假设你的最小值不会超过的值;max是你最大值不会小于的最小值
  3.             min=10000;
  4.             max=-10000;
  5.           }
  6.     $0~/xxx/{
  7.            if($4<min) min=$4;
  8.            if($4>max) max=$4;
  9.            }
  10.      END{
  11.            print min;
  12.            print max;
  13.          }' xxx.file
  14.             

复制代码

论坛徽章:
0
9 [报告]
发表于 2007-05-29 15:52 |只看该作者
有太多的假设,呵呵。

但是基本的精神就是能用一个命令完成的就用一个命令,减少IO操作和无关进程的调用。
这样处理大文件才有效率。

论坛徽章:
0
10 [报告]
发表于 2007-05-29 16:02 |只看该作者
赫赫  我对shell命令不是很熟悉,其实用基本命令写个脚本我也能搞定这个问题,不过貌似记得shell有些命令可以直接输出第一和最后,我想知道这些命令以后工作还是方便些,所以就来问问,多谢指教了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP