LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 969|回复: 11

如何只输出第一个匹配啊?

[复制链接]
发表于 2006-11-7 17:53:52 | 显示全部楼层 |阅读模式
由于匹配很多,awk跑起来速度太慢了。我只需要第一次匹配的行,有没有办法让第一次匹配后,就不往下找了。
发表于 2006-11-7 18:21:09 | 显示全部楼层
最好有个实例.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-8 11:36:38 | 显示全部楼层
比如说一个文件如下

。。。 ddd  。。。
。。。 bbb  。。。
。。。 ccc   。。。
。。。 bbb  。。。
。。。 aaa  。。。
。。。 bbb  。。。
。。。


我需要读第一次出现bbb的行中的某一项, 如awk ' /bbb/ { print $3 }' file
但是 含bbb的行太多,我明显感到机器顿了,我只需要第一次匹配的那行,没必要把整个文件都扫一遍啊,有没有办法,第一次匹配后就停下来。
回复 支持 反对

使用道具 举报

发表于 2006-11-8 11:45:00 | 显示全部楼层
gawk "/bbb/{n++}n==1{print $2;exit}" file
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-8 13:47:28 | 显示全部楼层
原来如此,多谢了。
回复 支持 反对

使用道具 举报

发表于 2006-11-8 13:58:05 | 显示全部楼层
其实方法很多的,例如:sed -n '/string/p' file | head -1,这样也可以阿。
回复 支持 反对

使用道具 举报

发表于 2006-11-8 14:03:35 | 显示全部楼层
sed -n /bbb/{p;q;}

bash加单引号sed -n '/bbb/{p;q;}'

关键是他要第一个匹配的某一栏。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-8 14:42:30 | 显示全部楼层
Post by luke_guo
其实方法很多的,例如:sed -n '/string/p' file | head -1,这样也可以阿。

sed -n '/string/p' file | head -1 怎么比 sed -n '/string/p' file速度要快啊,
head能结束sed的运行?还是因为打印的东西少了?
回复 支持 反对

使用道具 举报

发表于 2006-11-8 14:52:09 | 显示全部楼层
和终端打印速度有关吧,gnome-terminal表现性能提升的一个测试就是ls /usr/bin。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-8 15:10:52 | 显示全部楼层
恩,我刚才试了下,只跟打印有关,用head的话,还是扫完了全文,没提高速度。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表