![文件中金额的总和应作为单个值存储在 shell 变量中](https://linux22.com/image/172969/%E6%96%87%E4%BB%B6%E4%B8%AD%E9%87%91%E9%A2%9D%E7%9A%84%E6%80%BB%E5%92%8C%E5%BA%94%E4%BD%9C%E4%B8%BA%E5%8D%95%E4%B8%AA%E5%80%BC%E5%AD%98%E5%82%A8%E5%9C%A8%20shell%20%E5%8F%98%E9%87%8F%E4%B8%AD.png)
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
实用程序是一个标准任意精度计算器。