awk 1-liner覆盖匹配和非匹配cas

时间:2016-08-01 21:41:37

标签: awk

在awk单行中是否有办法用不同的打印语句覆盖正面和负面匹配情况?

举例说明。假设我有一个文件,我想用“#”添加一组单词,但仍想打印文件中的所有单词。

类似的东西:

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

当然以上都行不通。但是在awk中这样做的简单方法是什么。

干杯, 格特

3 个答案:

答案 0 :(得分:2)

为了涵盖一般情况,即打印完全不同的内容,您可以使用next

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

仅当第一个模式为假时才会到达第二个块。

您还可以在单​​个操作块中使用if / else

对于您的具体情况,您只需添加到记录和打印,您可以使用:

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

最后的1确保打印每条记录。

答案 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}'

这是我能想到的最短的代码,以实现您正在寻找的结果。

答案 2 :(得分:0)

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