2012-02-29 35 views
0

這個怎麼了?與getline匹配後撥出線路

for i in {0..16};do 
awk '/foo/ {while (getline > 0); print $0}' ${array[$i]} >> lines.txt;done 

我認爲是函數getline成功讀取的輸入線,當它到達結束文件,函數getline返回0並退出循環「的表述‘函數getline> 0’,將作爲長真。 「

我想打印出包含「foo」的行後的每一行。我得到了類似於我想要的東西,但是它不正確。

+0

如何精確貴輸出與預期的有什麼不同?一個例子會很好。 – Kevin 2012-02-29 17:40:15

+1

爲什麼不只是'sed -n -e'/ foo /,$ p''? – Sorpigal 2012-02-29 17:41:02

+0

它只打印最後一行 – AWE 2012-02-29 17:42:11

回答

3

取出分號。

awk '/foo/ { while(getline > 0) { print }}' 

或者

awk 'p; /foo/{p=1}' 
+0

我拿出分號! – AWE 2012-02-29 17:57:17

0

這是你的命令:

awk '/foo/ {while (getline > 0); print $0}' 

我認爲這將打印輸入文件的最後一行。既然你有一個「;」 while(..)後,所以它使while(..)取出每行(不打印)直到結束,然後打印$ 0將打印出它(最後一行)。

順便說一句,會有更容易的解決方案爲您的工作。例如

awk '/foo/{o=1}o' 
+0

這將打印'foo'行,將'o'移動到前面或添加'next'。 – Kevin 2012-02-29 17:47:39