我有一个功能设置来拖尾文件。
function testtail {
tail -f -n100 $1 | awk '/SNMP/ {print "\033[1;33m" $0 "\033[39m"}'
}
这可以按预期工作并打印包含我指定颜色的SNMP的所有行但是如何告诉awk还使用字符串SNMP否定任何行,以便与SNMP不匹配的行以另一种颜色打印?我试过了:
function testtail {
tail -f -n100 $1 | awk '/SNMP/ {print "\033[1;33m" $0 "\033[39m"}' '!/SNMP/ {print "\033[1;34m" $0 "\033[39m"}'
}
而且:
function testtail {
tail -f -n100 $1 | awk '/SNMP/ {print "\033[1;33m" $0 "\033[39m"}' | awk '!/SNMP/ {print "\033[1;34m" $0 "\033[39m"}'
}
但是都不行。我怎样才能做到这一点?
答案 0 :(得分:2)
对我来说,看起来你正在寻找一个if-else条件:
... | awk '{if ($0 ~ /SNMP/) {print "\033[1;33m" $0 "\033[39m"} else {print XXX}}'
XXX
可以是你想要的任何地方。
或更具惯用性:
... | awk '/SNMP/ {print "\033[1;33m" $0 "\033[39m"; next} {print XXX}'
由于这些是您要打印的字符串:
"\033[1;33m" $0 "\033[39m"
"\033[1;34m" $0 "\033[39m"
实际上,您可以使用变量来设置33或34,并保持其余部分保持不变。