2012-05-23 42 views
0

我需要打印出一條特定的記錄,它是來自尾部的3d,即NR == total NR-2。我一直在試圖這樣做了將近一個小時,仍然無法得到它的工作,所以這是我有:如何使用awk打印特定的NR

cat myfile | grep mystring | awk 'END {NR == $(NR-2); print $0}' 

這給了我最後的NR,爲​​什麼呢?

回答

2

awk流程每一行,只是當它完成時拋出它,你必須手動保存它[注意您的NR == $(NR-2)檢查行數是否等於最後一行中的(行數 - 2)字段]。最簡單的方法就是將它們全部存儲起來,但這不是非常有效的內存,所以我們只能存儲我們所見過的最後三個。其實最簡單的辦法是使用headtail

grep mystring myfile | tail -n3 | head -n1 

或者與awk

awk '/mystring/{three = two; two = one; one = $0} END{print three}' myfile 
+0

尾巴也是一個好方法! –

+0

謝謝,那可能怎麼樣?我的意思是,是三個|兩個|一個變量? – minerals

+0

@ user1413424是的,'three','two'和'one'是變量。在awk中,任何裸詞都是一個變量。 ('$ x'表示一個位置變量,即'x'th字段,'x'甚至可以是一個變量!) – Kevin

0

有兩種可能性。

可以使用命令tac(代替cat)扭轉文件(從尾至頭)和打印第三

,或者使用一個緩衝器把在存儲器中的最後x導致

+2

'rev'行內反轉字符,你要找的'tac'。 – Kevin

+0

謝謝,這很有趣 – minerals

+0

噢,謝謝@凱文! –