GNU/Linux >> Linux Esercitazione >  >> Linux

Rimuovere le righe duplicate adiacenti mantenendo l'ordine?

Ho un file con una colonna con nomi che si ripetono un numero di volte ciascuno. Voglio condensare ogni ripetizione in una, mantenendo tutte le altre ripetizioni con lo stesso nome che non sono adiacenti ad altre ripetizioni con lo stesso nome.

Per esempio. Voglio girare il lato sinistro verso il lato destro:

Golgb1    Golgb1    
Golgb1    Akna
Golgb1    Spata20
Golgb1    Golgb1
Golgb1    Akna
Akna
Akna
Akna
Spata20
Spata20
Spata20
Golgb1
Golgb1
Golgb1
Akna
Akna
Akna

Questo è quello che ho usato:perl -ne 'print if ++$k{$_}==1' file.txt > file2.txt
Tuttavia, questo metodo mantiene solo un rappresentante da sinistra (cioè Golb1 e Akna non vengono ripetuti).

C'è un modo per mantenere nomi univoci per ogni blocco, mantenendo i nomi che si ripetono in più blocchi non adiacenti?

Risposta accettata:

uniq lo farà per te:

$ uniq inputfile
Golgb1
Akna
Spata20
Golgb1
Akna

Linux
  1. Tieniti aggiornato - Bash For, While, Until Esempi di loop

  2. Come usare sed per rimuovere le ultime n righe di un file

  3. Rimuovi in ​​modo efficiente le ultime due righe di un file di testo estremamente grande

  4. come rimuovere le virgolette doppie in un csv

  5. Modificare l'ordine delle righe in un file

5 modi per contare il numero di righe in un file

Come rimuovere le righe duplicate all'interno di un file di testo?

Come rimuovere i duplicati in .bash_history, mantenendo l'ordine?

Rimuovere le righe di intestazione extra dal file, ad eccezione della prima riga?

Diff dove le linee sono per lo più le stesse ma fuori servizio?

Il ciclo while negli script della shell