2014-04-03 26 views
7

Data la seguente tabellaCome eliminare le righe duplicate in base al valore di una colonna?

123456.451 entered-auto_attendant 
123456.451 duration:76 real:76 
139651.526 entered-auto_attendant 
139651.526 duration:62 real:62` 
139382.537 entered-auto_attendant 

Utilizzando uno script di shell bash con sede a Linux, vorrei eliminare tutte le righe in base al valore di colonna 1 (quello con il numero lungo). Avere in considerazione che questo numero è un numero variabile

Ho provato con

awk '{a[$3]++}!(a[$3]-1)' file

sort -u | uniq 

Ma io non sto ottenendo il risultato che sarebbe qualcosa di simile, facendo un confronto tra tutti i i valori della prima colonna, eliminare tutti i duplicati e mostrarla

123456.451 entered-auto_attendant 
139651.526 entered-auto_attendant 
139382.537 entered-auto_attendant 

risposta

6

non hai dato un risultato previsto, funziona per te?

awk '!a[$1]++' file 

con i tuoi dati, l'output è:

stampe
123456.451 entered-auto_attendant 
139651.526 entered-auto_attendant 
139382.537 entered-auto_attendant 

e questa linea è solamente unico linea column1:

awk '{a[$1]++;b[$1]=$0}END{for(x in a)if(a[x]==1)print b[x]}' file 

uscita:

139382.537 entered-auto_attendant 
+0

+1: errore minore - 'b [$ 1]' dovrebbe essere 'b [x]' nel blocco 'END'. –

+0

era un errore di battitura, thx, risolto – Kent

+0

E se avessi bisogno di tutte le colonne che iniziano con 139382.537 (in questo caso) – user3494949

1

Utilizzando awk:

awk '!($1 in a){a[$1]++; next} $1 in a' file 
123456.451 duration:76 real:76 
139651.526 duration:62 real:62 
+0

Buono, ma mi piacerebbe avere tutti i record che iniziano con la stessa colonna, come nella descrizione, in tal caso sono 2 record con la stessa prima colonna, ma a volte possono essere tre o più – user3494949

+0

Isn è quello che sta già facendo questa risposta. Sta stampando tutte le linee duplicate. Qual è il tuo output previsto? – anubhava

2

uniq, per impostazione predefinita, confronta l'intera linea. Poiché le tue linee non sono identiche, non vengono rimosse.

È possibile utilizzare sort per eliminare comodamente Ordina per il primo campo e anche duplicati di esso:

sort -t ' ' -k 1,1 -u file 
  • -t ' ' campi sono separati da spazi
  • -k 1,1: guardare solo al primo campo
  • -u: eliminare i duplicati

Inoltre, potresti aver visto il trucco awk '!a[$0]++' per la deduplicazione delle linee. È possibile rendere questa deduplica solo sulla prima colonna utilizzando awk '!a[$1]++'.

1

provare questo comando

Problemi correlati