2010-05-06 19 views
5

Ho un file delimitato da tabulazioni con 5 colonne e devo recuperare un conteggio solo del numero di righe univoche dalla colonna 2. Lo farei normalmente con Perl/Python ma io Sono obbligato a usare la shell per questo.Conteggio di valori univoci in una colonna con uno script di shell

In passato ho utilizzato con successo la funzione uniq di nix con pip, ma sembra che dovrò utilizzare awk qui.

Qualsiasi consiglio sarebbe molto apprezzato. (Ho già fatto una domanda simile riguardo alle verifiche delle colonne usando awk ma questo è un po 'diverso e volevo separarlo, quindi se qualcuno in futuro ha questa domanda sarà qui)

Mille grazie!
Lilly

risposta

16

Non è necessario utilizzare awk.

$ cut -f2 file.txt | sort | uniq | wc -l 

dovrebbe farlo.

Questo utilizza il fatto che la scheda è il separatore di campo predefinito di cut, quindi otterremo il contenuto dalla seconda colonna in questo modo. Quindi un passaggio attraverso sort funziona come pre-stage per uniq, che rimuove i duplicati. Infine contiamo le linee, che è il numero ricercato.

+1

Questo è fantastico. Dopo aver fatto casino, ho scoperto che posso trovare qualsiasi duplicazione con questo file cat.txt | awk '{print $ 2}' | ordinare | uniq -c | ordina -n –

5

vado per

$ cut -f2 file.txt | sort -u | wc -l 

Almeno in alcune versioni, uniq si basa sui dati di input da ordinare (si guarda solo a linee adiacenti).

Ad esempio nel Solaris docs:

utilità

L'uniq leggerà un file di input confronto linee adiacenti, e scrivere una copia di ciascuna linea di ingresso sul uscita. Le seconde e successive copie di righe adiacenti ripetute non verranno scritte.

Le righe ripetute nell'ingresso non verranno rilevate se non sono adiacenti. .

0
awk '{if($0~/Not Running/)a++;else if($0~/Running/)b++}END{print a,b}' temp 
Problemi correlati