2012-02-29 33 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