Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
wckl
- Beiträge: 826
- Registriert: 10.08.2007 15:26:28
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: St. Georges de Didonne
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: 826
- Registriert: 10.08.2007 15:26:28
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: St. Georges de Didonne
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: 826
- Registriert: 10.08.2007 15:26:28
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: St. Georges de Didonne
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
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: 826
- Registriert: 10.08.2007 15:26:28
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: St. Georges de Didonne
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
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
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: 826
- Registriert: 10.08.2007 15:26:28
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: St. Georges de Didonne
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: 826
- Registriert: 10.08.2007 15:26:28
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: St. Georges de Didonne
Beitrag
von wckl » 14.01.2014 18:02:25
Anscheinend geht noch
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
Beitrag
von rendegast » 14.01.2014 22:16:00
Ist noch relativ neu,
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: 826
- Registriert: 10.08.2007 15:26:28
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: St. Georges de Didonne
Beitrag
von wckl » 15.01.2014 01:26:41
Vielen Dank!
war es also.