2012-02-29 3 views
0

何が問題なのですか? getlineとのマッチの後に行を目立たせる

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

は、私はそれがファイルの終わり、getlineの戻り0になるとループが終了するとのgetlineに成功。入力行を読み込むと「表現 『のgetline> 0』があればtrueになりますと思いました。 "

"foo"を含む行の後にすべての行を出力したいとします。私は上記の行で欲しいものに似た何かを得るが、それは正しくない。

+0

どのように正確にあなたの出力は、あなたが期待するものとは異なるのでしょうか?良い例があります。 – Kevin

+1

なぜ 'sed -n -e '/ foo /、$ p''だけではないのですか? – Sorpigal

+0

最後の行だけを表示します – AWE

答えて

3

セミコロンを取り出します。

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

それとも

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

私はセミコロンを取り出しました! – AWE

0

これはあなたのコマンドです:

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

私はそれが入力ファイルの最後の行のみ印刷をなると思います。あなたには ";" while(..)の後、while(..)は各行を(印刷せずに)最後まで取り出し、$ 0を出力して最後の行を出力します。

btw、あなたの仕事のためのより簡単な解決策があります。例えば

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

これは 'foo'行を表示し、' o'を先頭に移動するか 'next'を追加します。 – Kevin

関連する問題