2017-04-24 181 views
-1

我有一個grep命令返回超過20行。我需要顯示從grep的結果的最後一行4號線,最後第n行grep命令

可以說,我的文件有以下數據,

的test.txt

one 
two 
three 
four 
five 
six 
seven 
eight 
nine 
ten 

任務是:

grep "nine" test.txt // i want seven as result 

有人可以幫助我嗎?

+0

我不明白。 「grep」怎麼能用「seven」返回這行? – Barmar

+0

我想要結果「七」,雖然我使用搜索字符串作爲九。使用grep/awk/sed結果的最後第n行。 –

+3

'seven'在'nine'前面是2行,你的問題在比賽前說「第4行」。 – Barmar

回答

0

如果你想從最後的第n行,那麼顯然你的輸入是有限的,所以你不需要流媒體解決方案。所以你不妨倒轉輸入並從頭開始打印第n行:

grep ... | tac | sed -n "${n}{p; q; }" 
4

您可以使用grep-B選項把你的搜索行之前的任何數量的線,然後head -1將讓你從輸出的第一行:

grep -B2 nine file | head -1 

seven 
+1

非常感謝你 –

0

考慮:

$ cat file 
one 
two 
three 
four 
five 
six 
seven 
eight 
nine 
ten 

你可以使用awkn+1中的行數保存在一個緩衝區中,然後打印出n行之前的行:

$ awk -v n=2 'BEGIN{b=n+1} { buf[NR%b]=$0 } /nine/{ print buf[(NR-n)%b] }' file 
seven 
0

在awk中:

$ awk -v s=nine '$0~s{print q}{q=p;p=$0}' file 
seven 

解釋:

awk -v s='nine' ' # search string into s var 
$0~s { print q } # if match, print buffer q 
{ q=p; p=$0 }  # q is previous of previous 
' file 

如果有將只有一個匹配您可以將print q;之後添加exit

+0

非常感謝你 –