可以在下面的 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
現在我想做一些不同的事情。例如,我想在第一列編號相同時對第二列求和並重新開始。可以使用 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