使用awk或shell对分隔文件嵌套分隔的第37字段求和并追加到行尾
实现方案
直接使用awk内置的split()函数拆分嵌套字段即可完成求和与追加,完整命令如下:
awk 'BEGIN { FS=OFS="|" } { sum = 0 # 拆分第37个字段,以^为分隔符存入数组arr split($37, arr, "^") # 遍历数组累加数值 for (i=1; i<=length(arr); i++) { sum += arr[i] } # 保留两位小数,和示例输出格式对齐 sum = sprintf("%.2f", sum) # 打印原行+求和结果 print $0, sum }' 输入文件 > 输出文件
命令说明
BEGIN { FS=OFS="|" }:预设输入、输出字段分隔符均为|,保证追加的求和结果和原有字段格式统一split($37, arr, "^"):将第37个字段按^拆分后存入数组arr- 累加逻辑支持1到上百个嵌套数值的场景,无数量限制
可选操作
如果需要直接修改原文件(操作前建议备份),可使用GNU awk的原地修改参数:
gawk -i inplace 'BEGIN { FS=OFS="|" }{sum=0;split($37,arr,"^");for(i=1;i<=length(arr);i++) sum+=arr[i];sum=sprintf("%.2f",sum);print $0,sum}' 目标文件
测试验证
针对你提供的完整示例行,第37个字段的嵌套数值求和结果为136.16,会自动追加到行尾,符合预期效果。
内容的提问来源于stack exchange,提问作者Scott Ullmann
相关产品推荐
相关产品推荐

