You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 23:30:22