Kami memiliki file ini:
1 2
1 3
1 2
3 3
52 1
52 300
dan 1000 lainnya.
Saya ingin menghitung berapa kali setiap nilai muncul di kolom pertama.
1 3
3 1
52 2
Ini berarti kami melihat 1
tiga kali.
Bagaimana saya bisa melakukan itu, di Perl, AWK atau Bash?
Jawaban:
Jika input diurutkan, Anda dapat menggunakan uniq:
Jika tidak, urutkan terlebih dahulu:
Keluaran:
Outputnya ditukar dibandingkan dengan kebutuhan Anda, Anda dapat menggunakannya
awk '{ print $2, $1 }'
untuk mengubahnya.Ada juga idiom awk, yang tidak memerlukan input yang diurutkan:
Keluaran:
Karena output di sini berasal dari hash maka tidak akan dipesan, terima
sort -n
jika itu diperlukan:Jika Anda menggunakan GNU awk, Anda dapat melakukan pengurutan dari dalam awk:
Dalam dua kasus terakhir hasilnya adalah:
sumber
{h[$1]++}
Blok dievaluasi untuk setiap baris.h
adalah hash dan$1
merupakan kolom pertama dan digunakan sebagai kuncih
. Jadi ini menghitung seberapa sering unik$1
terlihat. TheEND
blok dijalankan pada akhir masukan, dan mencetak kunci dan penghitungan.sort -n
mengurutkan output secara numerik.