ループを使用して、以下の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番目の列の合計を計算し、最初の列の数字が同じ場合は再起動したいとします。 saw[$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を使用したい場合:
$ 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