Pertanyaan ini sudah memiliki jawaban di sini :Bagaimana cara menghitung jumlah data yang beridentitas sama pada kolom pertama?
(4 jawaban)
Tutup 2 tahun yang lalu.
Linux
(4 jawaban)
Tutup 2 tahun yang lalu.
Saya memiliki data tabel seperti di bawah ini
abc 1 1 1
bcd 2 2 4
bcd 12 23 3
cde 3 5 5
cde 3 4 5
cde 14 2 25
Saya ingin jumlah nilai di setiap kolom berdasarkan variabel di kolom pertama dan hasil yang diinginkan seperti di bawah ini:
abc 1 1 1
bcd 14 25 7
cde 20 11 35
Saya menggunakan perintah awk seperti ini
awk -F"\t" '{for(n=2;n<=NF; ++n)a[$1]+=$n}END{for(i in a ) print i, a[i] }' tablefilepath
dan saya mendapat hasil di bawah ini:
abc 3
bcd 46
cde 66
Saya rasa akhir kode saya salah tetapi tidak tahu cara memperbaikinya.
Saya memerlukan beberapa petunjuk untuk memperbaiki kode.
Jawaban yang Diterima:
Anda cukup dekat.
Anda lihat apa yang Anda lakukan salah, bukan?
Anda menyimpan satu total untuk setiap nilai 1 kolom,
padahal seharusnya Anda menyimpan tiga.
Ini mirip dengan jawaban Inian,
tetapi dapat diperluas secara sepele untuk menangani sejumlah kolom:
awk -F"\t" '{for(n=2;n<=NF; ++n) a[$1][n]+=$n}
END {for(i in a) {
printf "%s", i
for (n=2; n<=4; ++n) printf "\t%s", a[i][n]
printf "\n"
}
}'
Daripada menyimpan tiga larik, seperti jawaban Inian,
ia menyimpan larik dua dimensi.