Conta quante volte ogni riga appare in un file


23

Di 'che ho un file che contiene:

A
A
A
B
CC

Voglio avere l'output in questo modo:

A 3
B 1
CC 1

Risposte:


23

L'avevo capito; una delle uniqopzioni è -c, per "prefisso righe per il numero di occorrenze":

$ uniq -c

1
Nota che mette prima i numeri. Se fossi pignolo per l'ordine, potresti fare:uniq -c filename.txt | sed 's/[^0-9]*\\([0-9]\+\\) \\(.*\\)/\2 \1/'
frabjous

12
Si noti inoltre che conta solo le linee di ripetizione adiacenti. Un linguaggio comune èsort | uniq
Steven D

4
uniq mette anche il conteggio davanti al dato. La domanda originale avrebbe effettivamente bisogno di qualcosa del genere: sort nomefile | uniq -c | awk '{print $ 2, $ 1}'
Bruce Ediger

Nel caso in cui non sia chiaro dai commenti sopra, è necessario assicurarsi che i dati siano ordinati per primi per raggiungere il tuo obiettivo. Se non è ordinato, avrai voci ripetute. Ad esempio, se invece fosse il tuo file originale A \ A \ A \ B \ A \ CC, l'output di just uniq -cverrebbe mostrato A 3e successivamente mostrato A 1. Smistamento primo, garantirà tutte le linee identiche sono raggruppati
drootang

16

Sono appena venuto qui con un problema simile. Da questo, sono riuscito a mettere insieme un comando leggermente più avanzato, che spero sia utile per gli altri.

Come ha detto Steven D nei commenti sopra, uniqconta solo le linee di ripetizione adiacenti, quindi devi prima ordinare le linee. Dopodiché troviamo le linee uniche quindi riordiniamo in modo che le linee più ricorrenti siano in cima.

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

L'output viene reindirizzato nel file output.txt. Se vuoi solo visualizzare i risultati sulla riga di comando, rimuovi il reindirizzamento e modifica l'ultimo comando in sort -nmodo che la riga più comune sia in fondo, ovvero sicuramente ancora sullo schermo.


4
È possibile sostituire cat file.txt | sortcon solo sort file.txt. :)
mattdm

1
@mattdm: il rovescio della medaglia di quella formulazione è che non puoi sostituirlo rapidamente catcon qualcosa di più interessante. Dal momento che, sai, non c'è cat.
SamB,

1
@SamB Quindi scrivilo come < file.txt sort | uniq -c. Questo è facile da modificare ed evita comunque il superfluo cat.
hvd,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.