awk 1衬板,覆盖匹配和非匹配cas

awk 1衬板,覆盖匹配和非匹配cas,awk,Awk,在awk单行程序中,是否有一种方法可以用不同的打印语句同时覆盖正匹配和负匹配情况 举例说明。假设我有一个文件,其中我想在一组单词前加上“#”,但仍然想打印文件中的所有单词 比如: awk '/red/||/green/ { print "# My mod : " $0 } else { print $0 }' 当然,上述方法行不通。但在awk中实现这一点的简单方法是什么 干杯, 格特那“痛苦”的长手呢 awk '{if (/red/||/green/ ) { print "# My mod :

在awk单行程序中,是否有一种方法可以用不同的打印语句同时覆盖正匹配和负匹配情况

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

比如:

awk '/red/||/green/ { print "# My mod : " $0 } else { print $0 }'
当然,上述方法行不通。但在awk中实现这一点的简单方法是什么

干杯, 格特

那“痛苦”的长手呢

awk '{if (/red/||/green/ ) { print "# My mod : " $0 } else { print $0 }}'
这对我很有用;-),但是你可以通过打字节省一些字符

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


这是我能想到的最短的代码量,以实现您想要的结果。

要涵盖一般情况,即打印完全不同的内容,您可以使用
下一步

awk '/red|green/ { print "foo"; next } { print "bar" }' file
仅当第一个模式为false时,才到达第二个块

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

对于仅添加到记录和打印的特定情况,可以使用以下方法:

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

结尾处的
1
确保打印每条记录。

我承认@TomFenech;-)是最短的代码解决方案39个字符,对51;-)。祝大家好运。
awk '{ print (/red|green/ ? "# My mod : " : "") $0 }' file
awk '{ print (/red|green/ ? "# My mod : " : "") $0 }' file