Ich habe eine Textdatei mit Zeilen wie diesen:
This is a thread 139737522087680
This is a thread 139737513694976
This is a thread 139737505302272
This is a thread 139737312270080
.
.
.
This is a thread 139737203164928
This is a thread 139737194772224
This is a thread 139737186379520
Wie kann ich mir der Einzigartigkeit jeder Zeile sicher sein?
HINWEIS: Ziel ist es, die Datei zu testen und nicht zu ändern, wenn doppelte Zeilen vorhanden sind.
Antworten:
quelle
uniq
stattsort -u
uniq
wäre dies ein großer Fehler. es werden nur benachbarte Zeilen dedupliziert!sort <file> | uniq -d
würde man die Duplikate drucken.Awk Lösung:
quelle
echo
inEND
?&& echo
oder|| echo
ist eine Konvention in Antworten, um anzuzeigen, dass ein Befehl mit dem Exit-Statuscode das Richtige tut. Das Wichtigste ist dasexit(1)
. Idealerweise würden Sie dies so verwendenif has_only_unique_lines file; then ...
, nichtif [[ $(has_only_unique_lines file) = "no dupes" ]]; then ...
, das wäre dumm.sort
wird auch will verwendet, unabhängig davon, ob es Dupes gibt oder nicht, oder? Wie spart das Speicher?Verwenden von
sort
/uniq
:Um nur nach doppelten Zeilen
-d
zu suchen, verwenden Sie die Option für uniq. Dies zeigt nur doppelte Zeilen an, wenn keine vorhanden sind, wird nichts angezeigt:quelle
TLDR
Die ursprüngliche Frage war unklar und lautete, dass das OP lediglich eine eindeutige Version des Inhalts einer Datei wünschte. Das ist unten gezeigt. In der seitdem aktualisierten Form der Frage gibt das OP nun an, dass es lediglich wissen möchte, ob der Inhalt der Datei eindeutig ist oder nicht.
Testen Sie, ob der Inhalt der Datei eindeutig ist oder nicht
Sie können einfach verwenden
sort
, um zu überprüfen, ob eine Datei eindeutig ist oder Duplikate wie folgt enthält:Beispiel
Angenommen, ich habe diese beiden Dateien:
Beispieldatei duplizieren eindeutige BeispieldateiWenn wir nun diese Dateien analysieren, können wir feststellen, ob sie eindeutig sind oder Duplikate enthalten:
Testduplikatdatei eindeutige Datei testenOriginalfrage (eindeutiger Inhalt der Datei)
Kann mit nur gemacht werden
sort
:quelle
Normalerweise zähle ich
sort
die Datei unduniq
zähle dann die Anzahl der Duplikate. Dann sehe ichsort
noch einmal die Duplikate am Ende der Liste.Ich habe den von Ihnen angegebenen Beispielen ein Duplikat hinzugefügt:
Da ich die Manpage
uniq
schon eine Weile nicht mehr gelesen habe , habe ich schnell nach Alternativen gesucht. Im Folgenden ist die zweite Sortierung nicht mehr erforderlich, wenn Sie nur Duplikate anzeigen möchten:quelle
Wenn keine Duplikate vorhanden sind, sind alle Zeilen eindeutig:
Beschreibung: Sortieren Sie die Dateizeilen, um wiederholte Zeilen fortlaufend zu machen (sortieren).
Extrahieren Sie alle aufeinander folgenden Zeilen, die gleich sind (uniq -d).
Wenn der Befehl über (
[...]
) ausgegeben wird ,&&
drucken Sie ( ) eine Nachricht.quelle
Dies wäre ohne eine Perl-Antwort nicht vollständig!
Dadurch wird jede nicht eindeutige Zeile einmal gedruckt. Wenn also nichts gedruckt wird, enthält die Datei alle eindeutigen Zeilen.
quelle
Verwenden
cmp
undsort
inbash
:oder
Dies würde die Datei jedoch zweimal sortieren, genau wie die akzeptierte Antwort.
quelle