awk:打印满足字段条件的第一行

6

我知道这是一个非常简单的问题,但我想打印出符合给定字段条件的许多文件中的第一行:

$ awk ' ( $3>=0.2 ) { print $3, $5 } ' Data.out

我尝试在几个地方插入END来退出打印,但是我无法使其工作...以上代码会打印出所有$3>=0.2的行...


2
“END”不会停止程序,它会在所有行都被读取后执行。 - Kevin
4个回答

4
首先想到的是添加“exit”:

中。

awk '$3 >= 0.2 { print $3, $5; exit }' file

但是,除非你只想执行这个操作,否则你需要一个标志:

awk '$3 >= 0.2 && !f { print $3, $5; f=1 }' file

我又遇到了“限制数量”错误。我认为MKS awk在Win 7 Pro下出现了问题...谢谢你的帮助! - user1537723

1
您要查找的命令是nextfile
gawk '$3 >= 0.2 { print $3, $5; nextfile }' *.out

如果您没有使用gawk,这里有一些关于如何在其他awk中模拟此行为的建议。然而,根据gnu页面上的说明,它已经成为2012 POSIX标准的一部分。

0

exit 的问题(除了你可能遇到的明显兼容性问题)是,如果你有多个文件,它将完全不会处理下一个文件。这里有一个用于多个文件的脚本:

awk 'FNR==1{f=1}
    $3>=0.2{if(f)print $3,$5;f=0}' file1 file2 ...

你可能可以通过在第一次匹配后关闭输入文件来进行优化,但这至少可以让你开始。


0

awk ' ( $3>=0.2 ) { print $3, $5; exit } ' Data.out


我收到一个错误信息“限制数量”(MKS Toolkit 9.2,Win 7 Pro)...使用单引号和双引号时,gawk也会出现相同的错误... - user1537723
如果你像我建议的那样添加了 exit,你会得到那个错误吗?没有它就不会出错吗? - Etan Reisner
是的,在cmd和ksh中,使用awk和gawk都可以。如果没有'exit',在awk中我会得到所有$3>0.2的行的输出,但在gawk中会出现单引号错误。我应该补充说明,有报道称Win 7 Pro会破坏MKS Toolkit pipes等,所以谁知道... - user1537723

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接