H|~^20200425|~^abcd|~^sum
R|~^abc|~^2019-03-06T12:33:52.27|~^1000123.34567|~^2018-04-12T12:33:52.27|
R|~^abc|~^2019-03-05T12:33:52.27|~^111930.02876|~^2018-10-23T12:33:52.27|
R|~^abc|~^2019-03-05T12:33:52.27|~^2112320.028|~^2018-10-24T12:33:52.27|
R|~^abc|~^2019-03-06T12:33:52.27|~^12230.0809|~^2018-09-11T12:33:52.27|
R|~^abc|~^2019-03-05T12:33:52.27|~^3076543789.00878|~^2018-08-05T12:33:52.27|
R|~^abc|~^2019-03-06T12:33:52.27|~^156655.0389|~^2018-10-23T12:33:52.27|
R|~^abc|~^2019-03-06T12:33:52.27|~^10453.0489|~^2018-04-08T12:33:52.27|
R|~^abc|~^2019-03-05T12:33:52.27|~^20654.0907|~^2018-07-23T12:33:52.27|
我需要获取从“R”开始的记录的第四个字段中的总金额之和。我希望将所有行的金额总和存储在变量中。如何实现
答案1
variable=$( awk -F '^' '$1 == "R|~" { sum += $4 } END { print sum }' file )
该awk
命令将数据视为^
- 分隔,并对第一个字段中包含 的每一行中的第四个字段求和R
,然后在读取所有数据后打印总和。|~
在将字段数据转换为数值期间,字段末尾的非数字数据(字符串)将被忽略。
然后使用标准命令替换将命令的输出awk
分配给变量。
对于非常大的数字,请使用bc
:
variable=$(
awk -F '^' '$1 == "R|~" { sub("\\|.*","",$4); print $4 "+\\" } END { print "0" }' file |
bc
)
这将打印出总和作为要bc
处理的计算。这bc
实用程序是一个标准任意精度计算器。