Wie kann ich die eindeutigen Zeilen finden und alle Duplikate aus einer Datei entfernen? Meine Eingabedatei ist
1
1
2
3
5
5
7
7
Ich möchte, dass das Ergebnis lautet:
2
3
sort file | uniq
wird den Job nicht machen. Zeigt alle Werte 1 Mal an
Wie kann ich die eindeutigen Zeilen finden und alle Duplikate aus einer Datei entfernen? Meine Eingabedatei ist
1
1
2
3
5
5
7
7
Ich möchte, dass das Ergebnis lautet:
2
3
sort file | uniq
wird den Job nicht machen. Zeigt alle Werte 1 Mal an
sort file | uniq
, warum alle Werte 1 Mal angezeigt werden, ist, dass die Zeile, auf die sie beim ersten Mal trifft, sofort gedruckt wird und bei den nachfolgenden Begegnungen einfach übersprungen wird.
Antworten:
uniq
hat die Option, die Sie benötigen:
-u, --unique
only print unique lines
$ cat file.txt
1
1
2
3
5
5
7
7
$ uniq -u file.txt
2
3
Verwenden Sie wie folgt:
sort < filea | uniq > fileb
uniq -u filea > fileb
sort<filea.txt | uniq>fileb.txt
. Vielleicht haben Sie die Erweiterungen weggelassen. Ich benutze ein Mac OS X. Sie müssen zu einem filea.txt
anderen fileb.txt
sort
und der Punkt, an den Sie weiterleiten können, uniq
wenn Sie nur das tun können, sort -u file -o file
was Sie tun, ist das Entfernen der doppelten Werte, dh Ihr OP fileb
enthält 1,2,3,5,7
nur die eindeutigen Zeilen, die 2,3
durch die uniq -u file
Dateierweiterung erreicht werden und erreicht werden Ihre Antwort ist falsch.
uniq -u hat mich verrückt gemacht, weil es nicht funktioniert hat.
Also stattdessen, wenn Sie Python haben (die meisten Linux-Distributionen und Server haben es bereits):
#Python
#Assuming file has data on different lines
#Otherwise fix split() accordingly.
uniqueData = []
fileData = open('notUnique.txt').read().split('\n')
for i in fileData:
if i.strip()!='':
uniqueData.append(i)
print uniqueData
###Another option (less keystrokes):
set(open('notUnique.txt').read().split('\n'))
Nur zu Ihrer Information: Von der Uniq-Manpage:
"Hinweis: 'uniq' erkennt wiederholte Zeilen nur, wenn sie benachbart sind. Möglicherweise möchten Sie zuerst die Eingabe sortieren oder 'sort -u' ohne 'uniq' verwenden. Außerdem werden bei Vergleichen die in 'LC_COLLATE' angegebenen Regeln berücksichtigt."
Eine der richtigen Möglichkeiten zum Aufrufen mit: # sort nonUnique.txt | uniq
$ cat x
3
1
2
2
2
3
1
3
$ uniq x
3
1
2
3
1
3
$ uniq -u x
3
1
3
1
3
$ sort x | uniq
1
2
3
Sie können den eindeutigen Wert in "Datei" auch mit dem cat
Befehl ausdrucken, indem Sie an sort
und weiterleitenuniq
cat file | sort | uniq -u
uniq -u < file
wird den Job machen.
uniq
sollte gut tun, wenn Ihre Datei sortiert ist / sein kann, wenn Sie die Datei aus irgendeinem Grund nicht sortieren können, können Sie verwenden awk
:
awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}'
sort -d "file name" | uniq -u
das hat bei mir für einen ähnlichen funktioniert. Verwenden Sie dies, wenn es nicht angeordnet ist. Sie können die Sortierung entfernen, wenn sie angeordnet ist
Dies war das erste Mal, dass ich es versuchte
skilla:~# uniq -u all.sorted
76679787
76679787
76794979
76794979
76869286
76869286
......
Nach einer Katze -e all.sorted
skilla:~# cat -e all.sorted
$
76679787$
76679787 $
76701427$
76701427$
76794979$
76794979 $
76869286$
76869286 $
Jede zweite Zeile hat ein Leerzeichen :( Nach dem Entfernen aller Leerzeichen hat es funktioniert!
Danke
Ich finde das einfacher.
sort -u input_filename > output_filename
-u
steht für einzigartig.
sort file | uniq -u
wird für Sie auf die Konsole ausgegeben.