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 | uniqwird 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 | uniqwird 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.txtanderen fileb.txt
sortund der Punkt, an den Sie weiterleiten können, uniqwenn Sie nur das tun können, sort -u file -o filewas Sie tun, ist das Entfernen der doppelten Werte, dh Ihr OP filebenthält 1,2,3,5,7nur die eindeutigen Zeilen, die 2,3durch die uniq -u fileDateierweiterung 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 catBefehl ausdrucken, indem Sie an sortund weiterleitenuniq
cat file | sort | uniq -u
uniq -u < file wird den Job machen.
uniqsollte 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 -uwird für Sie auf die Konsole ausgegeben.