2013-08-11 33 views
7

Po prostu mam plik.txt z wieloma liniami, chciałbym usunąć zduplikowane wiersze bez sortowania pliku. jakiego polecenia mogę użyć w bashie unix?jak usunąć duplikaty linii w pliku tekstowym w bash unix?

próbka plik.txt

orangejuice;orange;juice_apple 
pineapplejuice;pineapple;juice_pineapple 
orangejuice;orange;juice_apple 

próba wyjścia:

orangejuice;orange;juice_apple 
pineapplejuice;pineapple;juice_pineapple 
+0

Chciałbym zobaczyć ten zamknięty jako duplikat, też, ale mam nadzieję, że to lepsze pytanie połączyć. – tripleee

Odpowiedz

14

Można użyć do tego Perl:

perl -ne 'print unless $seen{$_}++' file.txt 

Przełącznik -n czyni proces Perl linia pliku przez linię. Każda linia ($_) jest przechowywana jako klucz w haszdzie o nazwie "seen", ale od ++ dzieje się po zwróceniu wartości, linia jest drukowana przy pierwszym jej spełnieniu.

+0

To w aliasie, gdy wyjście do pliku> output.txt tworzy pusty plik? alias RDL = "perl -ne" drukuj, chyba że $ seen {$ _} ++ 'cleanList.txt> cleanList2.txt " root @ server:/tmp # RDL Nie można zmodyfikować anonimowego skrótu ({}) w postincrement (++) w linii -1, w pobliżu "} ++" Wykonanie instrukcji -e zostało przerwane z powodu błędów kompilacji. root @ server:/tmp # –

+0

Znaleziono kota -n nazwa_pliku | sort -uk2 | sort -nk1 | cut -f2- na https://stackoverflow.com/questions/11532157/unix-removing-duplicate-lines-without-sorting –

+0

Komenda 'uniq' działa w aliasie nawet http://man7.org/linux/man -pages/man1/uniq.1.html –

34

Jednym ze sposobów, za pomocą awk:

awk '!a[$0]++' file.txt 
+0

Nie możesz zapisać tego do pliku przez alias pochodzący z bashrc> output.txt ma tylko jeden wiersz? –

+0

root @ server:/tmp # alias RDL = "awk"! A [\ 0 0] ++ "cleanList.txt> cleanList2.txt" bash:! A [\ 0 0] ++ ": nie znaleziono zdarzenia root @ serwer:/tmp # alias RDL = "awk" \! a [0 USD] ++ "cleanList.txt> cleanList2.txt" root @ mdserver:/tmp # RDL awk: cmd. linia: 1: \! a [bash] ++ awk: cmd. line: 1:^backslash nie ostatni znak na linii root @ server:/tmp # alias RDL = "awk" \\! a [0 0] ++ "cleanList.txt> cleanList2.txt" ??? –

+0

Znaleziono kota -n nazwa_pliku | sort -uk2 | sort -nk1 | cut -f2- na https://stackoverflow.com/questions/11532157/unix-removing-duplicate-lines-without-sorting –

Powiązane problemy