Wie kann ich doppelte Zeilen in einer Textdatei über die Eingabeaufforderung löschen?
Zum Beispiel: Ich habe eine 10-MB-Textdatei und möchte nur eine Zeile behalten My line
, aber irgendwo in der Textdatei befinden sich 2 My line
Sekunden.
command-line
text-processing
user95942
quelle
quelle
Antworten:
Mit awk
Die Art und Weise, wie es funktioniert, besteht darin, dass die Anzahl der Zeilen in einem Array beibehalten wird. Wenn die aktuelle Anzahl Null ist, dh beim ersten Vorkommen, wird die Zeile gedruckt, andernfalls wird mit der nächsten fortgefahren.
quelle
Es gibt mehrere Möglichkeiten, dies zu tun. Wenn die Bestellung nicht wichtig ist, sind Sort und Uniq am einfachsten zu merken. Wenn Sie jedoch die Reihenfolge der Textdatei beibehalten und dennoch Duplikate löschen möchten, ist awk genau das Richtige für Sie. Sie können auch sed verwenden, glaube ich.
Hier ist ein Beispiel
quelle
Habe dafür einen schönen Perl-Einzeiler mit md5-Hashes gefunden ;) , aber das ist langsam und lohnt sich nur, wenn Sie sehr lange Zeilen und eine riesige Datei haben, in der der Speicherbedarf erheblich reduziert wird:
Deshalb einfach benutzen
Quelle
Beispiel
cat foo
perl -ne '$seen{$_}++ or print' foo
quelle