[英]Match a word just once - AWK
我在閱讀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
路易斯321487
ANA 454345
佩德羅341435
ANA 941345
aha_2.txt
佩德羅201 723
古西837134
ANA 319518
辛迪738278
ANA 984265
。
。
。
。
同時,我這樣做了,但它不僅包括所有情況,還包括所有情況
/ ^ ana / {print $ 2} / ^ pedro / {print $ 2}
謝謝你的幫助 :-)
在打印第一個值( 以字符串ana
開頭的行的第二列)后,只需調用exit命令即可。
$ awk '$1~/^ana$/{print $2; exit}' file
454
僅處理一個文件。
awk '/ana/ { if (ana++ == 0) print $2 }' aha.txt
要么
awk '/ana/ && ana++ == 0 { print $2 }' aha.txt
或者,如果您不需要執行其他任何操作,則可以按照Avinash Raj在他的回答中的建議在打印后退出。
我有很多文件(
aha.txt
,aha_1.txt
,aha_2.txt
,...),每個文件內部都有ana
,而我只需要花點時間在每個文件中出現ana
,並且輸出必須是一個文件。
作為一個問題,這顯然是不同的。 如果您具有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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.