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

2番目の列を合計して次の行に結果を挿入するのに役立つスクリプトが必要なので、出力は次のようになります。

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 に答える