uniq aber umgekehrt mit Angabe eines Delimiters

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
pangu
Beiträge: 1400
Registriert: 15.11.2011 20:50:52
Lizenz eigener Beiträge: GNU General Public License
Wohnort: /proc/1

uniq aber umgekehrt mit Angabe eines Delimiters

Beitrag von pangu » 08.11.2012 15:42:33

Hi Leute,

ich hab folgende Ausgabe:
...
192.168.0.123,whizzle,maxmoritz
192.168.123.234,moonylong,eddy
10.1.2.3,getoff,ricky
172.1.2.3,foobar,eddy
...
Es ist eine IP-Adresse (unterschiedliche chars lang),Hostname,Username

Ich möchte die Zeilen anzeigen, die den gleichen Usernamen beinhalten, in diesem Beispiel sollte die Ausgabe also lauten:
192.168.123.234,moonylong,eddy
172.1.2.3,foobar,eddy
Ich hab erstmal meine Quelldateiliste anders angelegt, und zwar mit dem Usernamen zuerst, die sah dann so aus:
...
maxmoritz,192.168.0.123,whizzle
eddy,192.168.123.234,moonylong
ricky,10.1.2.3,getoff
eddy,172.1.2.3,foobar
...
Dann habe ich mit diesem Einzeiler versucht, die identischen Usernamen ausfindig zu machen:

Code: Alles auswählen

uniq -D -w4 quelldatei
Das würde in diesem Beispiel zwar funktionieren, aber wenn in der Liste auch
eddyhardy,192.168.178.5,habakuk
stehen würde, so würde der auch mit augelistet werden, das will ich aber nicht. Ich habe ja durch das -w4 angegeben, dass die ersten 4 Zeichen verglichen werden .Würde ich aber mehr angeben, dann schlägt das wiederum fehl, weil kurze Namen nicht mitauftauchen. Das heißt wenn ich -w7 verwende, krieg ich den den edwardanything und edwardanio aber nicht den eddy.

In der man von uniq, steht nix von Angabe eines Delimiters, das würde nämlich alles schon lösen. Wie macht man das? Gibts vielleicht einen äquivalenten Befehl um uniq rückwärts zu gestalten, dass er von Zeilende die Zeichenangabe liest? Dann könnte ich mit der oben genannten ersten Liste arbeiten und rückwärts den Vergleich starten.

freue mich auf eure Tips.
Man gibt Geld aus, das man nicht hat, um damit Dinge zu kaufen, die man nicht braucht, um damit Leute zu beeindrucken, die man nicht mag.

Benutzeravatar
shoening
Beiträge: 914
Registriert: 28.01.2005 21:05:59
Lizenz eigener Beiträge: MIT Lizenz

Re: uniq aber umgekehrt mit Angabe eines Delimiters

Beitrag von shoening » 08.11.2012 16:58:20

Hi,

wenn Du die Kommas durch Leerzeichen ersetzt, dann noch sortierst nach der 3. Spalte, dann kann uniq das auch:

Code: Alles auswählen

sed -e 's/,/ /g' test.txt | sort -k 3 | uniq -d -f 2
Ciao
Stefan
Bürokratie kann man nur durch ihre Anwendung bekämpfen.

Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: uniq aber umgekehrt mit Angabe eines Delimiters

Beitrag von Meillo » 08.11.2012 17:11:21

Oder du verwendest awk mit einem Username-indizierten Array.
Use ed once in a while!

Benutzeravatar
pangu
Beiträge: 1400
Registriert: 15.11.2011 20:50:52
Lizenz eigener Beiträge: GNU General Public License
Wohnort: /proc/1

Re: uniq aber umgekehrt mit Angabe eines Delimiters

Beitrag von pangu » 08.11.2012 17:20:51

shoening: dankeschön. Wieso wird denn nicht die Möglichkeit eines delimiter-chars in uniq angeboten? verstehe ich nicht, haben doch solche Formatierungsprogramme eigentlich immer ... grmbl :)
Man gibt Geld aus, das man nicht hat, um damit Dinge zu kaufen, die man nicht braucht, um damit Leute zu beeindrucken, die man nicht mag.

Antworten