Gibt es einen Unix-Befehl, mit dem überprüft werden kann, ob zwei Zeilen in einer Datei identisch sind?
Zum Beispiel Betrachten Sie eine Datei sentences.txt
This is sentence X
This is sentence Y
This is sentence Z
This is sentence X
This is sentence A
This is sentence B
Wir sehen, dass der Satz
This is sentence X
wird wiederholt.
Gibt es einen Befehl, der dies schnell erkennt, so dass ich ihn vielleicht so ausführen kann?
$ cat sentences.txt | thecommand
Line 1:This is sentence X
Line 4:This is sentence X
text-processing
search
Code blau
quelle
quelle
sort sentences.txt | uniq -d | grep -nFxf - sentences.txt
wäre ein wenig effizienter und würde potenziellearg list too long
Probleme vermeiden .Nicht genau das, was Sie wollen, aber Sie können versuchen, zu kombinieren
sort
unduniq -c -d
:2
Hier ist die Anzahl der gefundenen Duplikate für die Zeileman uniq
:quelle
WENN der Dateiinhalt in den Speicher passt,
awk
ist dies gut. Der Standard-Einzeiler in comp.lang.awk (ich kann keine Instanz von diesem Computer aus durchsuchen, aber es gibt jeden Monat mehrere), um zu erkennen, dass es Duplikate gibtawk 'n[$0]++'
, zählt die Vorkommen der einzelnen Zeilenwerte und gibt alle Vorkommen aus. andere als die erste, da die Standardaktion istprint $0
.Das Anzeigen aller Vorkommen, einschließlich des ersten, in Ihrem Format, aber möglicherweise in gemischter Reihenfolge, wenn mehr als ein Wert dupliziert wird, ist etwas komplizierter:
Aus Gründen der Übersichtlichkeit werden Sie in der Regel in mehreren Zeilen zusammen ausgeführt. Wenn Sie dies häufig tun, können Sie das
awk
Skript in eine Datei mitawk -f
oder natürlich das Ganze in ein Shell-Skript einfügen. Wie die meisten einfachenawk
kann dies sehr ähnlich mit gemacht werdenperl -n[a]
.quelle