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

使用awk对两个文件列求和时如何避免空行位置显示0

问题原因

你原来的命令没有区分空行和正常数据行:空行的$3默认会被awk识别为数值0,累加后输出阶段就会在原空行位置输出 0(两个空字段加0值)。

修改后的命令
awk 'FNR == NR {
    if (NF == 0) {
        empty[FNR] = 1
    } else {
        a[FNR] = $1
        b[FNR] = $2
        s[FNR] = $3
    }
    next
}
NF != 0 {
    s[FNR] += $3
}
END {
    for (i = 1; i <= FNR; i++) {
        if (empty[i] == 1) {
            print ""
        } else {
            print a[i], b[i], s[i]
        }
    }
}' file1 file2 > file-result
改动说明
  • 拆分两个文件的处理逻辑:处理第一个文件时,用empty数组标记所有空行的行号,非空行则存储前两列和初始第三列值
  • 处理第二个文件时,仅对非空行执行第三列累加操作
  • 输出阶段优先判断行是否为标记的空行,是则直接输出空行,否则输出拼接后的正常数据

内容的提问来源于stack exchange,提问作者lucian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:06:03