0

嗨,我有一个 csv 文件,其中包含以下数据。

2013 年 8 月 22 日 1,417,196,108

2013 年 8 月 23 日 1,370,586,883

2013 年 8 月 24 日 1,362,561,606

2013 年 8 月 25 日 1,177,575,904

2013 年 8 月 26 日 1,228,394,403

2013 年 8 月 27 日 1,276,168,499

2013 年 8 月 28 日 1,265,333,615

我想要一个可以帮助我对第二列求和并将结果插入下一行的脚本,因此输出应如下所示:

2013 年 8 月 22 日 1,417,196,108

2013 年 8 月 23 日 1,370,586,883

2013 年 8 月 24 日 1,362,561,606

2013 年 8 月 25 日 1,177,575,904

2013 年 8 月 26 日 1,228,394,403

2013 年 8 月 27 日 1,276,168,499

2013 年 8 月 28 日 1,265,333,615

总计 9,097,817,018

4

2 回答 2

3

这个问题的棘手部分是千位分隔符。

试试这条线:

awk '{print;gsub(/,/,"");s+=$2}END{printf "Total %'\''d\n",s}' file

用你的数据测试:

kent$  awk '{print;gsub(/,/,"");s+=$2}END{printf "Total %'\''d\n",s}' f
8/22/2013 1,417,196,108

8/23/2013 1,370,586,883

8/24/2013 1,362,561,606

8/25/2013 1,177,575,904

8/26/2013 1,228,394,403

8/27/2013 1,276,168,499

8/28/2013 1,265,333,615
Total 9,097,817,018
于 2013-09-06T10:38:58.570 回答
2

纯 bash 解决方案:

#!/bin/bash

while read -r _ curNumber; do
    (( answer += ${curNumber//,/} ))
done < file.csv

(( start = (${#answer} % 3 == 0 ? 3 : ${#answer} % 3) ))
echo -n "${answer:0:start}"
for ((i = start; i < ${#answer}; i += 3)); do
    echo -n ",${answer:i:3}"
done
echo
于 2013-09-06T10:52:40.003 回答