我正在阅读GNU awk手册,但我没有找到一个正则表达式,我只能匹配一次字符串。 例如,从文件aha_1.txt,aha_2.txt,aha_3.txt,....我想从第一次ana出现在文件中打印第二列$ 2(aha_1.txt,aha_2.txt,aha_3。文本, ....)。另外,当pedro出现时同样的事情。
aha_1.txt
luis 321 487
ana 454 345
pedro 341 435
ana 941 345
aha_2.txt
pedro 201 723
gusi 837 134
ana 319 518
cindy 738 278
ana 984 265
与此同时,我这样做了,但它不仅仅是第一次计算所有情况
/ ^ ana / {print $ 2} / ^ pedro / {print $ 2}
感谢您的帮助: - )
答案 0 :(得分:2)
在打印第一个值(以字符串ana
开头的行中的第二列)后,只需调用exit命令。
$ awk '$1~/^ana$/{print $2; exit}' file
454
答案 1 :(得分:1)
仅处理一个文件。
awk '/ana/ { if (ana++ == 0) print $2 }' aha.txt
或
awk '/ana/ && ana++ == 0 { print $2 }' aha.txt
或者,如果您不需要执行任何其他操作,则可以按照Avinash Raj answer中{{3}}的建议,在打印后退出。
我有很多文件(
aha.txt
,aha_1.txt
,aha_2.txt
,...)每个文件里面都有ana
,我只需要暂时ana
{{ 1}}出现在每个文件中,输出必须是一个文件。
作为一个问题,这有点不同。如果你有GNU grep
,你可以使用(或多或少):
grep -m1 -e ana aha*.txt
这将列出整行,而不仅仅是第2列,并列出文件名,因此它不是一个完美的匹配。
使用awk
,您需要多做一点工作:
awk 'FILENAME != old_file { ana = 0; old_file = FILENAME }
/ana/ { if (ana++ == 0) print $2 }' aha*.txt