2012-01-04 3 views
19

私はawkスクリプトを書こうとしています。このスクリプトは特定の条件をチェックし、その条件を満たす行をスローします。条件が実行されたときにawkを次の行に移動させるにはどうすればよいですか?

特定の条件は、ファイルの最初の2行とテキストxyzzy:で始まる行を破棄することです。そのために、私はコード化された:

awk ' 
    NR < 2 {} 
    /^xyzzy:/ {} 
       {print}' 

それはそうでないものを2つの条件のいずれかが満たされた線と印刷を捨てるだろうと思って。

残念ながら、printは、行が他の2つのパターンのいずれかと一致する場合でも処理されているようです。

現在の行の他のすべての状態チェックを無視して、次の行に移動するCのようなアクションがありますか?

私は 3番目のルールとして((NR > 1) && (!/^xyzzy:/)) {print}のようなものを使用することとしたがそれは私にはかなり醜いようです。

また、これを行う別の方法がありますか?

+0

を。 html)は、私がそれを学び始めたときに非常に役立つと分かっていました。もちろん、非常に精巧なガイドがあります(http://www.gnu.org/software/gawk/manual/gawk.pdf)。しかし私は本の上のチュートリアルが好きです。 :) –

答えて

29

あなたのアクションとしてキーワードnextを使用

あなたは2つのファイルを反復処理したい場合は、このキーワードが便利です。場合によっては2回処理したいファイルと同じです。

次のイディオム表示されます:私はawk` `に何の専門家でありませんが、ここで本当にいい[チュートリアル](http://www.grymoire.com/Unix/Awkある

awk ' 
FNR==NR { 
    < stuff that works on file 1 only > 
    next 
} 
{ 
    < stuff that works on file 2 only > 
}' ./infile1 ./infile2 
+0

ああ、投稿する前にPerlish 'next'を試してみたはずです。 P.S.私は 'NR = <2'を試していたので、あなたは' NR <= 2'(それに応じて固定)を意味すると仮定しています。乾杯。 – paxdiablo

+0

おっと、そうです、それは私が意味していたことです。 – SiegeX

+1

'next'は' awk'の**ベストな機能です。 :) –

関連する問題