我需要打印出一條特定的記錄,它是來自尾部的3d,即NR == total NR-2。我一直在試圖這樣做了將近一個小時,仍然無法得到它的工作,所以這是我有:如何使用awk打印特定的NR
cat myfile | grep mystring | awk 'END {NR == $(NR-2); print $0}'
這給了我最後的NR,爲什麼呢?
我需要打印出一條特定的記錄,它是來自尾部的3d,即NR == total NR-2。我一直在試圖這樣做了將近一個小時,仍然無法得到它的工作,所以這是我有:如何使用awk打印特定的NR
cat myfile | grep mystring | awk 'END {NR == $(NR-2); print $0}'
這給了我最後的NR,爲什麼呢?
awk
流程每一行,只是當它完成時拋出它,你必須手動保存它[注意您的NR == $(NR-2)
檢查行數是否等於最後一行中的(行數 - 2)字段]。最簡單的方法就是將它們全部存儲起來,但這不是非常有效的內存,所以我們只能存儲我們所見過的最後三個。其實最簡單的辦法是使用head
和tail
:
grep mystring myfile | tail -n3 | head -n1
或者與awk
:
awk '/mystring/{three = two; two = one; one = $0} END{print three}' myfile
尾巴也是一個好方法! –
謝謝,那可能怎麼樣?我的意思是,是三個|兩個|一個變量? – minerals
@ user1413424是的,'three','two'和'one'是變量。在awk中,任何裸詞都是一個變量。 ('$ x'表示一個位置變量,即'x'th字段,'x'甚至可以是一個變量!) – Kevin