使用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
相关产品推荐
相关产品推荐

