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

如何使用awk计算TSV文件两列绝对差值并新增为第四列

问题背景

待处理TSV文件内容:

Hi 10 6
hello 7 1
Hi 6 2

需求:新增第四列,取值为第二列、第三列差值的绝对值,期望输出:

Hi 10 6 4
hello 7 1 6
Hi 6 2 4

原有执行失败的命令:

awk -F\t '{print $0 OFS $2-$3}' file
正确实现方案

原命令存在3个核心问题:

  • 字段分隔符写法错误:-F\t未加引号包裹时,shell会将\t转义为普通字符t,导致awk无法按制表符正确拆分字段
  • 未显式指定输出分隔符:awk默认输出分隔符为空格,无法保持TSV的制表符分隔格式
  • 未做绝对值计算:直接做减法$2-$3会在$3大于$2时输出负数,不符合需求

兼容所有awk版本的命令(无依赖)

awk -F'\t' -v OFS='\t' '{d = $2 - $3; print $1, $2, $3, d < 0 ? -d : d}' file

GNU Awk(绝大多数Linux环境默认awk)简化写法

GNU Awk内置绝对值函数abs(),可以直接调用:

awk -F'\t' -v OFS='\t' '{print $0, abs($2-$3)}' file

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:42:24