Hitung berapa kali setiap baris muncul dalam file

23

Katakanlah saya punya file yang berisi:

A
A
A
B
CC

Saya ingin memiliki output seperti ini:

A 3
B 1
CC 1
Cheng
sumber

Jawaban:

23

Saya menemukan jawabannya; salah satu uniqopsi adalah -c, untuk "baris awalan dengan jumlah kemunculan":

$ uniq -c
Cheng
sumber
1
Catatan yang menempatkan nomor terlebih dahulu. Jika Anda rewel tentang pesanan, Anda dapat melakukan:uniq -c filename.txt | sed 's/[^0-9]*\\([0-9]\+\\) \\(.*\\)/\2 \1/'
frabjous
12
Perhatikan juga bahwa itu hanya menghitung garis pengulangan yang berdekatan. Idiom yang umum adalahsort | uniq
Steven D
4
uniq juga menempatkan hitungan di depan datum. Pertanyaan aslinya sebenarnya membutuhkan sesuatu seperti ini: sort filename | uniq -c | awk '{print $ 2, $ 1}'
Bruce Ediger
Jika tidak jelas dari komentar di atas, Anda harus memastikan data diurutkan terlebih dahulu untuk mencapai tujuan Anda. Jika tidak diurutkan, Anda akan memiliki entri berulang. Misalnya, jika file asli Anda sebagai gantinya A \ A \ A \ B \ A \ CC, output hanya uniq -cakan ditampilkan A 3dan kemudian ditampilkan A 1. Mengurutkan terlebih dahulu, akan menjamin semua garis identik dikelompokkan bersama
drootang
16

Saya baru saja datang ke sini dengan masalah yang sama. Dari sini, saya berhasil menyusun perintah yang sedikit lebih maju, yang saya harap bermanfaat bagi orang lain.

Seperti yang dikatakan Steven D dalam komentar di atas uniqhanya menghitung garis pengulangan yang berdekatan, jadi Anda perlu mengurutkan garis terlebih dahulu. Setelah itu kami menemukan garis-garis unik lalu mengurutkan lagi sehingga garis yang paling sering muncul adalah di atas.

sort file.txt | uniq -c | sort -nr > output.txt

Output diarahkan ke file output.txt. Jika Anda hanya ingin melihat hasil pada baris perintah, hapus redirection dan ubah perintah terakhir ke sort -nsehingga baris paling umum akan berada di bagian bawah, yaitu pasti masih di layar.

DisgruntledGoat
sumber
4
Anda bisa menggantinya cat file.txt | sortdengan adil sort file.txt. :)
mattdm
1
@mattdm: Kelemahan dari formulasi itu adalah Anda tidak dapat dengan cepat mengganti catdengan sesuatu yang lebih menarik. Karena, Anda tahu, tidak ada cat.
SamB
1
@ Sam Kemudian tulis sebagai < file.txt sort | uniq -c. Ini mudah diedit, dan tetap menghindari yang tidak perlu cat.
hvd