使用awk/sed命令对指定格式文件的明细记录指定带符号字段求和
解决明细记录指定字段求和问题
首先明确我们要处理的原始数据:
000Bxxxxx111118064085vxas - header 10000000001000000000053009-000000000053009- 10000000005000000000000000+000000000000000+ 10000000030000000004025404-000000004025404- 10000000039000000000004930-000000000004930- 10000000088000005417665901-000005417665901- 90000060883328364801913 - trailer
需求很明确:仅处理以1开头的明细记录,提取每条记录中**第28位到第44位(包含符号)**的数值,最终对这些数值求和。
使用awk命令实现
用awk处理这类文本提取+数值计算的需求非常高效,直接用下面的命令即可:
awk '/^1/ { val = substr($0,28,17); sum += val } END { print sum }' your_input_file.txt
命令细节解释
/^1/:只匹配以1开头的行(也就是目标明细记录),自动跳过header和trailer行。substr($0,28,17):从当前行($0代表整行内容)的第28个字符开始,截取17个字符(第28到44位共17个字符:44-28+1=17),得到的就是带符号的目标数值字符串。sum += val:awk会自动将字符串形式的数值转换为数字,累加到求和变量sum中。END { print sum }:所有行处理完成后,输出最终的求和结果。
手动验证计算结果
我们提取每条明细的目标字段并转换为数值:
- 第一条:
000000000053009-→-53009 - 第二条:
000000000000000+→0 - 第三条:
000000004025404-→-4025404 - 第四条:
000000000004930-→-4930 - 第五条:
000005417665901-→-5417665901
求和结果:-53009 + 0 -4025404 -4930 -5417665901 = -5421749244,运行上述awk命令会直接输出这个结果。
内容的提问来源于stack exchange,提问作者user9794957
相关产品推荐
相关产品推荐

