2016-08-01 80 views
1

awk單線程中有一種方法可以用不同的打印語句覆蓋正面和負面的匹配案例嗎?awk單線程覆蓋匹配和非匹配CAS

舉例說明。比方說,我有一個文件,我想用'#'預先輸入一組單詞,但仍想打印文件中的所有單詞。

喜歡的東西:

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

當然,上述不會工作。但在awk中做到這一點的簡單方法是什麼?

乾杯, 格特

回答

2

爲了覆蓋一般情況下,即在打印完全不同的東西,你可以使用next

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

第二塊,如果所述第一圖案是假僅達到。

您也可以在單個操作塊中使用if/else

針對您的特殊情況下,如果你只是增加了記錄和打印,您可以使用此:

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個字符,而51 ;-)。祝你們好運。 – shellter

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