Dalam file dengan jumlah kolom yang berbeda dibatasi oleh spasi '', Cara menghitung jumlah kolom. Contoh akan menunjukkan kebutuhan:
File A:
1 2
2 3
4 5 6
1 1 1 5
Maka hasilnya adalah:
- untuk kolom 1 (1 + 2 + 4 + 1) = 8
- untuk kolom 2 adalah 11
- untuk kolom 3 adalah 7
- untuk kolom 4 adalah 5
command-line
scripts
Maythux
sumber
sumber
Gunakan
numsum
untuk tugas itu dan pisahkan antara pemrosesan data dan hasilkan hasilnya.Instal
num-utils
, kita perlunumsum
Dan mulailah dengan
Contoh
atau dengan format yang Anda inginkan:
dari
man numsum
contoh dari
man numsum
sumber
sumber
(( col1 += a ))
, dll. Juga,echo "..."
lebih aman, dan jugawhile IFS= read -r ...
echo
aman digunakan seperti itu untuk menggaungkan angka,$IFS
default di spasi putih dan itu diharapkan angka, jadi tidak perlu berurusan dengan backslash. Satu-satunya downside dari jawaban ini adalah kebutuhan mengetahui jumlah kolom sebelum eksekusi.echo "[...]"
untuk mencetak dengan benar apa yang tidak ingin Anda hasilkan tidak masuk akal.echo $var
danwhile read a b c
, itu bekerja di sini. Namun, Anda akan terbiasa menulis dengan cara yang lemah dan suatu hari Anda akan mendapatkan kesalahan aneh saat memproses file yang lebih kompleks. Maka Anda akan melihat mengutip variabel dan menggunakanwhile IFS= read -r ...
lebih aman dan akan berkata "oh yeah fedorqui benar, saya harap saya bisa memeluknya untuk menunjukkan rasa terima kasih!".Menilai dari komentar atas jawaban Anda sendiri, Anda hanya ingin jumlah satu kolom pada satu waktu. Jika demikian, berikut ini adalah cara non-awk untuk melakukannya:
di mana Anda akan mengganti
3
dengan nomor kolom yang Anda minati.sumber
Berikut ini adalah pendekatan skrip Perl satu baris. Ini bergantung pada penggunaan
-a
flag yang memungkinkan auto-splitting saat ini membaca baris dengan-n
flag menjadi array@F
. Yang harus kita lakukan adalah beralih pada item-item itu, dan menambahkannya ke indeks masing-masing dalam$sum
array, sehingga secara efektif setiap item array adalah jumlah untuk setiap kolom masing-masing. Akhirnya, kami mencetak hasilnya dalamEND
blok kode.Atau, inilah pendekatan skrip Perl lengkap. Itu bergantung pada pemisahan setiap baris ke dalam array, dan iterasi atas setiap item dalam array yang menambahkan setiap nomor ke kepemilikan masing-masing dalam
@sums
array. Script mencetak setiap baris, lalu menghasilkan laporan untuk setiap kolom. Pencetakan setiap baris dapat dihapus dengan menambahkan#
sebelumnyaprintf("%s",$line);
Penggunaannya sederhana
chmod +x ./sum_columns.pl && ./sum_columns.pl input.txt
. Sebagai contoh:sumber
Solusi sederhana:
Ganti saya dengan nomor kolom misalnya kolom1:
output adalah:
sumber