列全体の合計をループするには、以下の txt ファイルを使用します。
101 10
101 10
101 10.10
101 13
101 10
101 10
102 10.140
102 10
102 10
102 0.90
102 10
103 10
104 10
111 11
111 11
111 5.485e+12
111 11
awk '{sum+=$2;} END{print sum;}' file1.txt > sum_a.txt
今、私は何か違うことをしたいです。例えば、最初の列の番号が同じになるまで2番目の列を合計し、もう一度やり直したいです。seen[$1]を使用してこれを行うことはできますか?
awk '{ seen[$1] += $2 } END { for (i in seen) print i, seen[i] }' file1.txt
ここで、$1 はインデックス値として扱われます。
を使用しても実行できませんでしたseen[$1]
。または、ループを実行する他の良い方法はありますか?
結果は次のようになります。
101 63.10
101 63.10
101 63.10
101 63.10
101 63.10
101 63.10
102 40. 90
などなど、列全体まで続きます。
答え1
$ awk 'NR==FNR{sum[$1]+=$2; next} {print $1, sum[$1]}' file file
101 63.1
101 63.1
101 63.1
101 63.1
101 63.1
101 63.1
102 41.04
102 41.04
102 41.04
102 41.04
102 41.04
103 10
104 10
111 5485000000033
111 5485000000033
111 5485000000033
111 5485000000033
答え2
awk を使用して 1 つの入力ファイルのみを使用する場合:
$ awk -v c=1 '{ a[$1]+=$2;b[c]=$1;c+=1} END { for( i=1;i<=NR;i++ ){key=b[i]; print key" "a[key]} }' file1.txt
101 63.1
101 63.1
101 63.1
101 63.1
101 63.1
101 63.1
102 41.04
102 41.04
102 41.04
102 41.04
102 41.04
103 10
104 10
111 5485000000033
111 5485000000033
111 5485000000033
111 5485000000033