循環到不同的數字並再次開始循環(Awk/Bash)

循環到不同的數字並再次開始循環(Awk/Bash)

可以在下面的 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

相關內容