GNU/Linux >> Linux Esercitazione >  >> Linux

Rimuovere le righe in base ai duplicati all'interno di una colonna senza ordinare?

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

Linux
  1. Rimuovi le righe pari o dispari da un file di testo

  2. Rimuovi il file senza chiedere

  3. Rimuove le prime N righe da un file di registro attivo

  4. Utilizzo di awk per sommare i valori di una colonna, in base ai valori di un'altra colonna

  5. Come rimuovere un file senza usare rm?

Come ordinare il comando superiore in base all'utilizzo della memoria

Obarun – Una distribuzione Linux basata su Arch senza Systemd

Rimuovi le righe vuote in un file di testo tramite grep

File di ordinamento della shell Linux in base alla seconda colonna?

Elenca le righe di un solo file in DIFF

Rimuovi tutti i collegamenti simbolici dei file in un comando