答案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
即使对于所写的值02
或0011
它们确实发生过,它也应该起作用。这也符合您通过数值(其中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