Eine Zusammenfassung und Erklärung mehrerer Methoden zum Entfernen doppelter Zeilen aus Dateien auf der Bash-Befehlszeile von Linux-Computern/Servern.
Wenn Sie sich die folgende Referenz ansehen, werden Sie feststellen, dass es viele Möglichkeiten gibt, doppelte Zeilen aus Dateien mit Befehlen zu entfernen.
shell - Remove duplicate entries using a Bash script - Stack Overflow
Dieses Mal habe ich nach dem Vergleich der Ausgabe jedes Befehls einige interessante Verifizierungsergebnisse erhalten, daher möchte ich sie zusammen mit diesen Erkenntnissen vorstellen.
Lassen Sie uns zunächst mit fuga.txt als Beispiel verifizieren, das doppelte hoge-Einträge wie unten gezeigt hat.
$ cat > fuga.txt
hoge
fuga
foo
hoge
bar
$ cat fuga.txt | sed '$!N; /^\(.*\)\n\1$/!P; D'
hoge
fuga
foo
hoge
bar
$ cat fuga.txt | sort -u
bar
foo
fuga
hoge
$ cat fuga.txt | awk '!a[$0]++'
hoge
fuga
foo
bar
Mit sed ’$!N; /^(.*)\n\1$/!P; D’ wurde die doppelte Zeile “hoge” nicht entfernt, da die doppelten Zeilen nicht aufeinanderfolgend sind.
sort -u sortiert vor dem Entfernen doppelter Zeilen, daher unterscheidet sich das Ergebnis erheblich vom ursprünglichen Dateiinhalt.
awk ‘!a[$0]++’ scheint ohne besondere Probleme zu funktionieren.
Lassen Sie uns mit dem Folgenden verifizieren. Die Ergebnisse waren interessant.
$ cat > fuga.txt
りんご
ぱいん
[りんご]
りんご
ぱぷりか
[りんご]
なす
$ cat fuga.txt | sed '$!N; /^\(.*\)\n\1$/!P; D'
りんご
ぱいん
[りんご]
りんご
ぱぷりか
[りんご]
なす
$ cat fuga.txt | sort -u
[りんご]
なす
りんご
ぱぷりか
$ cat fuga.txt | awk '!a[$0]++'
りんご
ぱいん
[りんご]
ぱぷりか
なす
Haben Sie es bemerkt? Die Anzahl der Ausgabezeilen unterscheidet sich zwischen sort -u und awk ‘!a[$0]++’. Die nicht doppelte Zeile “ぱいん”, die in der awk-Version beibehalten wird, ist in der sort-Version verschwunden.
Ich habe darüber nachgedacht, konnte aber die Ursache nicht herausfinden. Ich denke, es ist sicher, dies als Fehler zu betrachten.
Basierend auf diesen Ergebnissen scheint awk ‘!a[$0]++’ für das Entfernen doppelter Zeilen aus Dateien der am besten geeignete Befehl zu sein, da er die Reihenfolge beibehält und wahrscheinlich fehlerfrei ist.