Die Datei muss zuerst sortiert werden. sort file | uniq -uwird für Sie auf die Konsole ausgegeben.
ma77c
Ich denke, der Grund 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.
Das ist nicht richtig, ich denke du meintest:uniq -u filea > fileb
Chris Seymour
1
Ich kopiere Ihre Daten und führe sie aus und es funktioniert : 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
wechseln
Es ist keine Umleitung mit erforderlich, 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.
Chris Seymour
9
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):
Angenommen, Sie haben die Datendatei in notUnique.txt
#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'))
Beachten Sie, dass der endgültige Satz aufgrund leerer Zeilen möglicherweise Zeichenfolgen mit '' oder nur Leerzeichen enthält. Sie können das später entfernen. Oder einfach mit dem Kopieren vom Terminal wegkommen;)
#
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
Beispiellauf:
$ 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
Leerzeichen können gedruckt werden, seien Sie also vorbereitet!
Während sortO (n log (n)) Zeit benötigt, bevorzuge ich die Verwendung
awk '!seen[$0]++'
awk '!seen[$0]++'ist eine Abkürzung für awk '!seen[$0]++ {print}'print line (= $ 0), wenn seen[$0]nicht Null ist. Es braucht mehr Platz, aber nur O (n) Zeit.
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:
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
sort file | uniq -u
wird für Sie auf die Konsole ausgegeben.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:quelle
Verwenden Sie wie folgt:
quelle
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 einemfilea.txt
anderenfileb.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 OPfileb
enthält1,2,3,5,7
nur die eindeutigen Zeilen, die2,3
durch dieuniq -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):
Angenommen, Sie haben die Datendatei in notUnique.txt
Beachten Sie, dass der endgültige Satz aufgrund leerer Zeilen möglicherweise Zeichenfolgen mit '' oder nur Leerzeichen enthält. Sie können das später entfernen. Oder einfach mit dem Kopieren vom Terminal wegkommen;)
#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
Beispiellauf:
Leerzeichen können gedruckt werden, seien Sie also vorbereitet!
quelle
Sie können den eindeutigen Wert in "Datei" auch mit dem
cat
Befehl ausdrucken, indem Sie ansort
und weiterleitenuniq
cat file | sort | uniq -u
quelle
Während
sort
O (n log (n)) Zeit benötigt, bevorzuge ich die Verwendungawk '!seen[$0]++'
ist eine Abkürzung fürawk '!seen[$0]++ {print}'
print line (= $ 0), wennseen[$0]
nicht Null ist. Es braucht mehr Platz, aber nur O (n) Zeit.quelle
Sie können verwenden:
Diese sortieren Daten und filtern nach eindeutigen Werten
quelle
uniq -u < file
wird den Job machen.quelle
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 verwendenawk
:awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}'
quelle
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
quelle
Dies war das erste Mal, dass ich es versuchte
Nach einer Katze -e all.sorted
Jede zweite Zeile hat ein Leerzeichen :( Nach dem Entfernen aller Leerzeichen hat es funktioniert!
Danke
quelle
Ich finde das einfacher.
-u
steht für einzigartig.quelle