2013-08-11 44 views
7

Ich habe nur eine Datei.txt mit mehreren Zeilen, ich möchte doppelte Zeilen entfernen, ohne die Datei zu sortieren. Welchen Befehl kann ich in Unix Bash verwenden?wie doppelte Zeilen in einer Textdatei in Unix Bash zu löschen?

Probe von datei.txt

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

Probe Ausgabe:

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

Ich möchte sehen dies als Duplikat geschlossen, auch, aber ich hoffe, dass es eine bessere Frage zu verknüpfen ist. – tripleee

Antwort

14

Sie können dies für Perl verwenden:

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

Der -n Schalter macht Perl Prozess der Dateizeile nach Linie. Jede Zeile ($_) wird als Schlüssel in einem Hash mit dem Namen "seen" gespeichert, aber da ++ nach dem Zurückgeben des Werts passiert, wird die Zeile beim ersten Mal gedruckt.

+0

Dies in einem Alias ​​bei der Ausgabe in eine Datei> output.txt erstellt eine leere Datei? alias RDL = "perl -ne 'drucken, außer $ seen {$ _} ++' cleanList.txt 'cleanList2.txt" root @ server:/tmp # RDL Kann anonymen Hash ({}) nicht in Postinkrement ändern (++) bei -e Zeile 1, nahe "} ++" Ausführung von -e wegen Kompilierungsfehlern abgebrochen. root @ server:/tmp # –

+0

Gefunden diese Katze -n Dateiname | sort -uk2 | sort -nk1 | Schnitt -f2- bei https://stackoverflow.com/questions/11532157/unix-removing-duplicate-lines-without-sorting –

+0

der 'uniq' Befehl funktioniert in einem Alias ​​auch http://man7.org/linux/man -pages/man1/uniq.1.html –

34

Eine Möglichkeit awk mit:

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

Sie können dies nicht über einen Alias ​​aus bashrc> output.txt in eine Datei schreiben, es hat nur eine Zeile? –

+0

root @ Server:/tmp # Alias ​​RDL = "awk"! A [\ $ 0] ++ 'cleanList.txt> cleanList2.txt " Bash:! A [\ $ 0] ++': Ereignis nicht gefunden root @ Server:/tmp # Alias ​​RDL = "awk" \! a [$ 0] ++ 'saubereListe.txt> cleanList2.txt " root @ mdserver:/tmp # RDL awk: cmd. Zeile: 1: \! a [Bash] ++ awk: cmd. Zeile: 1:^umgekehrter Schrägstrich nicht letztes Zeichen in Zeile root @ Server:/tmp # Alias ​​RDL = "awk" \\! a [$ 0] ++ 'cleanList.txt> cleanList2.txt " ??? –

+0

Gefunden diese Katze -n Dateiname | sort -uk2 | sort -nk1 | schnitt -f2- bei https://stackoverflow.com/questions/11532157/unix-removing-duplicate-lines-without-sorting –

Verwandte Themen