AWK脚本仅含一条print命令却每行打印两次,如何停止首个重复行输出?
AWK脚本重复打印每行,如何只保留处理后的行?
我的AWK脚本会将每行内容打印两次,想停止打印重复两行中的第一行,只保留处理后的那一行。
提供的CSV数据
Num,Type,Score,Height 1,rock,10,11 2,leaf,6,99 3,bleach,8,9 4,koch,1,0 5,bleach,19,19 6,korn,10,12 7,batman,99,10 8,leaf,6,7
原AWK脚本
FS = "," BEGIN{ good = 10 } { color = ($3 >= good ? 32 : 31) $3="\x1b["color"m"$3"\x1b[0m" print }
问题原因
你把FS = ","写在了BEGIN块外面,而且没加大括号包裹。AWK会把这条语句识别成一个独立的规则:FS=","是一个恒为真的模式,触发AWK的默认动作——打印当前行(原始未处理的内容);之后再执行你写的处理动作块,打印一次上色后的行,所以每行就重复输出了两次。
解决方法
把FS = ","移到BEGIN块内部,这样它只是启动时的初始化操作,不会触发额外的打印:
BEGIN{ FS = "," good = 10 } { color = ($3 >= good ? 32 : 31) $3="\x1b["color"m"$3"\x1b[0m" print }
修改后,AWK只会在启动时设置字段分隔符和分数阈值,之后对每一行只执行一次上色处理并打印,就不会出现重复行的问题了。
内容的提问来源于stack exchange,提问作者Code Noober
相关产品推荐
相关产品推荐

