Die Lösungen, die von anderen gepostet wurden, funktionieren nicht für meinen Debian-Jessie: Sie behalten eine einzige Kopie einer doppelten Zeile, während ich nach meinem Verständnis des OP alle Kopien der doppelten Zeilen aufzubewahren habe. Wenn ich das OP richtig verstanden habe, dann ...
Der folgende Befehl
awk '!seen[$0]++' file
Entfernt alle doppelten Zeilen.
Der folgende Befehl
awk 'seen[$0]++' file
Ausgänge alle Duplikate, aber nicht das Original: das heißt, wenn eine Zeile erscheint n mal, es gibt die Zeile n-1 mal.
Dann der Befehl
awk 'seen[$0]++' file > temp && awk '!seen[$0]++' file >> temp
löst dein Problem. Die Zeilen befinden sich nicht in der ursprünglichen Reihenfolge.
Wenn Sie Zeilen mit zwei oder mehr Duplikaten haben möchten, können Sie jetzt die obigen Schritte wiederholen:
awk 'seen[$0]++' file | awk 'seen[$0]++' > temp
behält n-2 Kopien der Zeilen mit n> 1 Duplikaten. Jetzt
awk '!seen[$0]++' temp > temp1
entfernt alle doppelten Zeilen aus der temporären Datei, und Sie können jetzt das gewünschte Element ( dh nur die Zeilen mit n> 1 Duplikaten) wie folgt erhalten:
cat temp1 >> temp; cat temp1 >> temp
Wenn Sie dies für Zeilen tun müssen, die N oder mehrmals vorkommen, geben Sie den folgenden Befehl ein
awk 'seen[$0]++ && seen[$0] > N' file
ist einfacher als das N- fache des Befehls
awk 'seen[$0]++' file
.