2016-08-01 5 views
1

awkの1ライナーで、異なるprint文で肯定と否定の両方のマッチをカバーする方法はありますか?awk 1ライナーでマッチしたものとマッチしないものをカバーする

説明する。私は '#'で単語のセットを前に置いて、ファイル内のすべての単語を印刷したいファイルがあるとしましょう。

ような何か:もちろん

awk '/red/||/green/ { print "# My mod : " $0 } else { print $0 }' 

上記の文句を言わない仕事。しかし、awkでこれを行う簡単な方法は何でしょうか。

乾杯、 ゲルト

答えて

2

すなわち完全に異なる何かを印刷する一般的なケースをカバーするには、nextを使用することができます。

awk '/red|green/ { print "foo"; next } { print "bar" }' file 

第一のパターンがfalseの場合は、2番目のブロックだけに達しています。

if/elseを1つのアクションブロック内で使用することもできます。あなたはちょうどあなたがこの使用することができ、記録および印刷に追加されている、あなたの特定のケースについては、

:最後に

awk '/red|green/ { $0 = "# My mod : " $0 } 1' file 

1は、すべてのレコードが印刷されていることを保証します。

1

どのように "痛い" 長針について;-)私のために動作しますが、あなたが入力して、いくつかの文字を保存することができます

awk '{if (/red/||/green/) { print "# My mod : " $0 } else { print $0 }}' 

awk '{if (/red|green/) {print "# My mod : " $0 } else {print $0} }' 

OR

awk '{print ($0~/red|green/) ? "# My mod : $0 " : "" $0}' 

あなたが探している結果を達成するために考えることができる最も短いコードです。

+0

私は最短コード解決策を@TomFenech ;-) 39文字、vs 51 ;-)に認めます。皆さんお元気で。 – shellter

0
awk '{ print (/red|green/ ? "# My mod : " : "") $0 }' file 
関連する問題