如何对同ID的两个文件对应字段做差值计算并格式化输出
解决方案:批量计算文件对应ID的数值差值
需求说明
现有两个文本文件:
- File A:每行第1列为ID(同一ID存在多条记录),第2列为日期,第3至12列为数值
- File B:每行第1列为唯一ID,第3至12列为对应基准数值
需要将File A中每条记录的第3至12列数值,减去File B中相同ID对应的第3至12列数值,输出结果的第3至12列需以%8.2f格式呈现。
实现脚本(AWK)
使用AWK脚本可高效完成该任务,代码如下:
awk ' NR==FNR { # 读取File B,存储每个ID对应的基准数值 for(i=3; i<=12; i++) { b_vals[$1,i] = $i } next } { # 输出File A的前两列 printf "%s %s", $1, $2 # 计算并格式化输出差值 for(i=3; i<=12; i++) { printf "%8.2f", $i - b_vals[$1,i] } print "" } ' FileB FileA
脚本说明
- 处理File B:
NR==FNR是AWK判断当前处理第一个输入文件的常用逻辑,这里将每个ID对应的第3-12列数值存入二维数组b_vals,以ID+列索引作为键 - 处理File A:遍历每一行时,先输出前两列(ID和日期),再循环计算第3-12列与对应基准值的差值,用
%8.2f格式输出每个差值 - 执行方式:直接在终端执行上述命令,替换
FileB和FileA为实际文件名即可;也可将代码保存为.awk脚本文件后运行
内容的提问来源于stack exchange,提问作者ncwxpanther
相关产品推荐
相关产品推荐

