如果某个数值大于 0,则将整行打印为红色

如果某个数值大于 0,则将整行打印为红色

我的输出显示了这一点,这是一个暗淡的诊断结果。

在此输入图像描述

但我只想用红色打印高于 0 的结果,其余的应该是默认颜色。所以结果只出现在“:”之后,其余的都是暗淡的位置,所以这并不重要。

到目前为止我尝试过这个

awk -F ' *: *' '$2 ~ $1 > 0 {print "\033[31m" $0"\033[0m"; next} 1' test.txt

但我明白了

在此输入图像描述

答案1

你的正则表达式匹配很奇怪,我不确定你在那里要做什么。

这适用于我的小测试文件:

awk -F":" '$2 !~ /^0 /  {print "\033[31m" $0"\033[0m"; next} 1' test.txt

测试.txt:

Hello:0 D1
Hello:1 D2
Hello:10 D12

答案2

尝试这个:

$ awk -F ' *: *|[[:blank:]]' '$2>0 {print "\033[31m" $0"\033[0m"; next} 1' test.txt

$2即使对于所写的值020011它们确实发生过,它也应该起作用。这也符合您通过数值(其中00实际上是零,021是21)进行测试的逻辑,而不是通过字符值进行测试,字符值是$2 !~ /^0/(注意后面没有空格0)或$2 !~ /^0 /(注意后面的空格,0如其他答案中那样)所做的。它通过指定两个可能的字段分隔符来实现这一点:' *: *''[[:blank:]]'覆盖普通空格和制表符。

$2请注意,如果第二个字段 ( ) 不是 0 或缺失,则上面的记录将以红色打印。

答案3

未经测试,因为我们没有可供测试的示例输入/输出,但这可能就是您想要的:

awk -F ':' '($2+0) > 0 {$0 = "\033[31m" $0 "\033[0m"} 1' test.txt

相关内容