簡體   English   中英

只匹配一個單詞-AWK

[英]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.txtaha_1.txtaha_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM