Ho file di grandi dimensioni a 3 colonne (~ 10.000 righe) e vorrei rimuovere le righe quando il contenuto della terza colonna di quella riga appare nella terza colonna di un'altra riga. Le dimensioni dei file rendono l'ordinamento un po' ingombrante e non posso usare qualcosa come il codice seguente perché le intere righe non sono identiche; solo il contenuto della colonna 3.
awk '!seen[$0]++' filename
Risposta accettata:
Basta cambiare il comando awk nella colonna in cui desideri rimuovere le righe duplicate in base a quella colonna (nel tuo caso la terza colonna):
awk '!seen[$3]++' filename
Questo comando dice a awk
quali righe stampare. La variabile $3
contiene l'intero contenuto della colonna 3 e le parentesi quadre sono l'accesso all'array. Quindi, per ogni terza colonna di riga in filename, il nodo dell'array denominato seen
viene incrementato e la riga stampata se il contenuto di quel nodo(colonna3) non era (!
) precedentemente impostato.
Sopra funzionerà se le tue colonne nel file di input sono delimitate da spazi/schede, se è qualcos'altro, dovrai dirgli di awk con il suo -F
opzione. Quindi, ad esempio, se le colonne delimitate da virgola(,
) e vuole rimuovere le righe in base alla terza colonna, utilizzare il comando come segue:
awk -F',' '!seen[$3]++' filename