[gelöst] sort: IP-Nummern sortieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
wckl
Beiträge: 788
Registriert: 10.08.2007 15:26:28
Lizenz eigener Beiträge: GNU General Public License
Wohnort: St. Georges de Didonne

[gelöst] sort: IP-Nummern sortieren

Beitrag von wckl » 14.01.2014 11:53:01

Hallo,
ich möchte eine Datei nach den IP-Nummern sortieren, sie hat diesen Aufbau:
Fr 1. Mär 13:05:01 CET 2013 xxxx.dyndns.org has address 90.30.220.76
bekomme aber die IP-Nummern nicht aufsteigend sortiert, es treten solche Folgen auf:
2.6.122.148
2.6.123.154
2.6.123.86
2.6.124.143
2.6.124.16
Probiert habe ich es mit:

Code: Alles auswählen

sort -k 10 -u alle | sort --key=10 | awk '{print $10}'
<alle> ist die Datei. Was mache ich falsch?

Vielen Dank.

wckl
Zuletzt geändert von wckl am 14.01.2014 16:03:28, insgesamt 1-mal geändert.

wckl
Beiträge: 788
Registriert: 10.08.2007 15:26:28
Lizenz eigener Beiträge: GNU General Public License
Wohnort: St. Georges de Didonne

Re: sort: IP-Nummern sortieren

Beitrag von wckl » 14.01.2014 13:37:36

Im Internet habe ich noch diese Lösung gefunden:

Code: Alles auswählen

sort -k 10 -u alle | awk '{print $10}' | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n
Die richtig sortiert.
Allerdings wollte ich eigentlich die komplette Zeile nach der IP-Nummer sortiert haben, damit ich weiß, wann die IP-Nummer gewechselt hat - der awk-Teil ist also nur zum Test gedacht.
Mit -t. kann ich die Zeile aber nicht aufspalten, weil die IP-Nummer sich mit dem Punkt nicht separieren läßt.
Also habe ich noch keine Lösung für das Problem.

wckl
Beiträge: 788
Registriert: 10.08.2007 15:26:28
Lizenz eigener Beiträge: GNU General Public License
Wohnort: St. Georges de Didonne

Re: sort: IP-Nummern sortieren

Beitrag von wckl » 14.01.2014 14:18:36

Jetzt habe ich noch diesen Hinweis gefunden.
Also muß ich die IP-Nummer mit führenden Nullen auf die gleiche Anzahl an Zeichen pro Feld normieren, dann sortieren und anschließend die führenden Nullen wieder entfernen.

Ganz schön kompliziert! Gibt es da keine Lösung direkt mit sort ?

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: sort: IP-Nummern sortieren

Beitrag von roli » 14.01.2014 14:49:49

wckl hat geschrieben:Im Internet habe ich noch diese Lösung gefunden:

Code: Alles auswählen

sort -k 10 -u alle | awk '{print $10}' | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n
Die richtig sortiert.
Allerdings wollte ich eigentlich die komplette Zeile nach der IP-Nummer sortiert haben, damit ich weiß, wann die IP-Nummer gewechselt hat - der awk-Teil ist also nur zum Test gedacht.
Mit -t. kann ich die Zeile aber nicht aufspalten, weil die IP-Nummer sich mit dem Punkt nicht separieren läßt.
Also habe ich noch keine Lösung für das Problem.
Damit hast du die Lösung, du siehst sie nur nicht.
Wenn du AWK nutzt, und alles ausser der IP-Adr. wegschmeißt, brauchst du dich nicht wundern, wenn auch nur die IP-Adressen dabei raus kommen. So wie ich das sehe enthält eine deiner "Datenzeile" zusätzlich zu den Punkten in der IP-Adr drei weitere Punkte, also mußt du einfach die Spalten entsprechend anpassen.

Code: Alles auswählen

~$ echo -e "Fr 1. Mär 13:05:01 CET 2013 xxxx.dyndns.org has address 90.30.220.76\nFr 1. Mär 13:05:01 CET 2013 xxxx.dyndns.org has address 91.30.220.76\nFr 1. Mär 13:05:01 CET 2013 xxxx.dyndns.org has address 90.30.122.76\nFr 1. Mär 13:05:01 CET 2013 xxxx.dyndns.org has address 90.30.22.77"  | sort -t. -k 4,4n -k 5,5n -k 6,6n -k 7,7n
Fr 1. Mär 13:05:01 CET 2013 xxxx.dyndns.org has address 90.30.22.77
Fr 1. Mär 13:05:01 CET 2013 xxxx.dyndns.org has address 90.30.122.76
Fr 1. Mär 13:05:01 CET 2013 xxxx.dyndns.org has address 90.30.220.76
Fr 1. Mär 13:05:01 CET 2013 xxxx.dyndns.org has address 91.30.220.76
~$
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

wckl
Beiträge: 788
Registriert: 10.08.2007 15:26:28
Lizenz eigener Beiträge: GNU General Public License
Wohnort: St. Georges de Didonne

Re: sort: IP-Nummern sortieren

Beitrag von wckl » 14.01.2014 16:02:46

Richtig !
Ich hatte nur nicht damit gerechnet (und nicht ausprobiert),
daß die Spalte 4 mit dem Inhalt "org has address 90"
trotzdem richtig numerisch sortiert wird.

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: sort: IP-Nummern sortieren

Beitrag von roli » 14.01.2014 16:58:32

wckl hat geschrieben:daß die Spalte 4 mit dem Inhalt "org has address 90"
trotzdem richtig numerisch sortiert wird.
Das habe ich auch erst ausprobiert
<ironie>aber ist doch vollkommen klar das bei einem numerischen sort das vor "org has address 91" kommt</ironie>, oder etwa nicht :wink:
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

wckl
Beiträge: 788
Registriert: 10.08.2007 15:26:28
Lizenz eigener Beiträge: GNU General Public License
Wohnort: St. Georges de Didonne

Re: [gelöst] sort: IP-Nummern sortieren

Beitrag von wckl » 14.01.2014 17:43:00

Ich glaube, es funktioniert doch so nicht. Es liegt wohl eher an den Beispieldaten. Bei einer etwas größeren Liste wird doch nicht nach dem Feld "text Nr" richtig numerisch nach "Nr" sortiert.

Man muß wohl doch die Lösung mit awk anwenden:
- die IP-Nummer normieren, d.h. mit Nullen auffüllen und als zusätzliche Spalte einfügen;
- dann nach dieser Spalte sortieren;
- danach die normierte IP-Nummernspalte wieder löschen.

Jedenfalls geht es so bei meiner etwas umfangreicheren Liste der IP-Nummern.

wckl

wckl
Beiträge: 788
Registriert: 10.08.2007 15:26:28
Lizenz eigener Beiträge: GNU General Public License
Wohnort: St. Georges de Didonne

Re: [gelöst] sort: IP-Nummern sortieren

Beitrag von wckl » 14.01.2014 18:02:25

Anscheinend geht noch

Code: Alles auswählen

sort -t. -k 4,4d -k 5,5n -k 6,6n -k 7,7n
mit -k 4,4d für das erste Feld der IP-Nummer.

Das ist aber ggf. nur für diese Kombination aus gleichbleibendem "Text" und nur ändernden "Nr" in "Text Nr"

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: [gelöst] sort: IP-Nummern sortieren

Beitrag von rendegast » 14.01.2014 22:16:00

Ist noch relativ neu,

Code: Alles auswählen

sort -V ...

Code: Alles auswählen

$ cat sssssss 
2.6.122.148
2.6.123.154
2.6.123.86
2.6.124.143
2.6.124.16

$ sort -V sssssss 
2.6.122.148
2.6.123.86
2.6.123.154
2.6.124.16
2.6.124.143
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

wckl
Beiträge: 788
Registriert: 10.08.2007 15:26:28
Lizenz eigener Beiträge: GNU General Public License
Wohnort: St. Georges de Didonne

Re: [gelöst] sort: IP-Nummern sortieren

Beitrag von wckl » 15.01.2014 01:26:41

Vielen Dank!

Code: Alles auswählen

sort -k 10,10V datei
war es also.

Antworten