• This forum has a zero tolerance policy regarding spam. If you register here to publish advertising, your user account will be deleted without further questions.

uniq: Groß-/Kleinschreibung ignorieren

s24!

Registered User
Hallo,

ich muss eine Liste von doppelten Einträgen säubern. Ist ja mit 'uniq' getan - allerdings nicht, wenn in einer Zeile "abc" und in einer anderen "ABC" steht. Die Option --ignore-case funktioniert irgendwie nicht:

Code:
tim@pingu:~/new_svn/res/bins$ cat referrer.list | uniq -iu > referrer_cleaned.list
tim@pingu:~/new_svn/res/bins$ grep -i "ys.666LN.COM" referrer_cleaned.list
ys.666ab.com
ys.666AB.COM

Wie ihr seht, ist der Eintrag immer noch doppelt; einmal groß und einmal kleingeschrieben. Wo liegt mein Fehler und wie kann ich das Gewünschte umsetzen?

Danke vorab!

Viele Grüße
Tim
 
Steht in deinen Zeilen vielleicht noch mehr als nur der Text? Leerzeichen? Steuerzeichen?

Code:
# uniq -i testfile
ABC
def
muh

# uniq -iu testfile
muh

# cat testfile
ABC
abc
aBc
def
DEF
deF
muh
 
Nein, nichts dergleichen... Das sind alles nur Domains. Teilweise mit einem Punkt am Anfang oder am Ende, aber das war's auch schon.
 
Kleiner Hack:
Code:
cat referrer.list | tr "[:upper:]" "[:lower:]" | uniq -u > referrer_cleaned.list
grep -i "ys.666LN.COM" referrer_cleaned.list
 
So, meinen Grundsatzfehler habe ich jetzt auch gefunden. Folgendes gerade völlig überlesen:
Code:
tim@pingu:~/new_svn/res/bins$ uniq --help
[...]
Bemerkung: „uniq“ kann wiederholte Zeilen nicht erkennen, wenn Zeilensie nicht
auf einander folgen. Sie können die Eingabe vorher sortieren, oder auch
anstelle von „uniq“ gleich „sort -u“ verwenden.
[...]
(Bevor jemand meckert, weil das Ganze Deutsch ist: Das ist mein Notebook, kein Server. :D)

Danke noch mal an Joe - mein voller Aufruf sieht jetzt so aus:
Code:
tim@pingu:~/new_svn/res/bins$ cat referrer.list | sort -u | tr "[:upper:]" "[:lower:]" | uniq > referrer_cleaned.list

EDIT: Der Parameter -u bei uniq war falsch, ist korrigiert. Mit diesem Parameter ist meine vorher doppelte Zeile ganz verschwunden, da er dafür sorgt, nur Zeilen auszugeben, die nicht doppelt vorkamen.


... Und so mal eben die Liste von 3000 auf 2300 Einträge gekürzt. :) Da freut sich der NGINX, der die Liste - in einer für die Config angepassten Form - pro Request auf verbotene Referrer prüfen und somit komplett durchwandern muss. ;)



Viele Grüße
Tim
 
Last edited by a moderator:
Kürzer und weniger fehleranfällig:
Code:
cat referrer.list | tr "[:upper:]" "[:lower:]" | sort -u > referrer_cleaned.list
 
Code:
deadeye@deadeye-NFORCE-680i-SLI:~$ sort --version
sort (GNU coreutils) 8.20
...

Code:
sort --help
...
  -f, --ignore-case            Klein‐ als Großbuchstaben behandeln
...
  -u, --unique              mit -c: auf strikte Ordnung prüfen; ohne -c: nur
                              das erste von mehreren Gleichen ausgeben

Sofern deine sort-Version auch diesen Schalter anbietet, dann teste es doch mal damit.
 
Back
Top