AWKパターン - コード - ブロック構文:AWKでコードブロックをパターンごとに実行する方法は?

AWKパターン - コード - ブロック構文:AWKでコードブロックをパターンごとに実行する方法は?

複数行形式があるとしましょう。

this:foo ...
that: foo ...

1つのフォームまたは別のフォームに対して2つの異なるルーチンを実行したいと思います。

cat text_file \
| awk -F ':' '/:foo/ { # do this } # else print the whole line unchanged' 
| awk -F ':' '/ +foo +/ { # do that } # else print the whole line unchanged'

理想的には、次のように書くことができます。

cat text_file \
| awk -F ':' '
   /:foo/ { ... }
   / +foo +/ { ... } 
   ...
   /.*/ { print }
'

しかし、状況は私が予想したものとは非常に異なって流れているようだった。これを行う特別な方法はありますか?

ベストアンサー1

あなたはできます:

awk '
    /:foo/ { print "do-things"; next }
    /[[:blank:]]+foo[[:blank:]]+/ { print "do-some-other-things"; next }
    { print "do-else" }
' infile

私たちが使用するステートメントに注意してくださいnext。つまり、与えられたブロックの条件が真であれば、残りのコードを実行するためにジャンプします。上記の2つのブロック条件のいずれも満たされない場合、最後のブロックが実行される。

おすすめ記事