Portál AbcLinuxu, 26. dubna 2024 21:02


Dotaz: Sort IP adres

23.9.2012 17:44 Karel Marhoul
Sort IP adres
Přečteno: 236×
Odpovědět | Admin
Dobry den, pokud mam soubor s nasledujicim obsahem:
192.168.1.55
192.168.1.1
192.168.1.105
A pouziji na nej unixovy prikaz sort, dostanu:
192.168.1.1
192.168.1.105
192.168.1.55
Coz vzhledem k tomu, ze razenymi daty jsou IP adresy, neni kyzeny vysledek. Ten by mel vypadat takto:
192.168.1.1
192.168.1.55
192.168.1.105
Mohu takoveto razeni realizovat prostrednictvim standardnich linuxovych command line nastroju, aniz bych si na to muzel psat vlastni skript?

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

MMMMMMMMM avatar 23.9.2012 17:54 MMMMMMMMM | skóre: 44 | blog: unstable | Valašsko :-)
Rozbalit Rozbalit vše Re: Sort IP adres
Odpovědět | | Sbalit | Link | Blokovat | Admin
pomohlo by www.madboa.com/geek/sort-addr/ ?
Linux Dokumentační Projekt - PDF ke stažení
pavlix avatar 23.9.2012 17:55 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Sort IP adres
Odpovědět | | Sbalit | Link | Blokovat | Admin
sort -n
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
23.9.2012 17:59 rubicon
Rozbalit Rozbalit vše Re: Sort IP adres
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud tvůj sort podporuje parametr -V (--version-sort), máš vyřešeno. I bez něj to ale jde:

sort -t. -n -k1,1 -k2,2 -k3,3 -k4,4
pavlix avatar 23.9.2012 18:05 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Sort IP adres
Aha, to jsem tak trochu čekal, že -n bude fugnovat.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
xkucf03 avatar 23.9.2012 18:13 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Řazení IP adres pomocí Perlu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co třeba tohle? Převede IP na číslo, seřadí a převede zpátky:

echo -e "192.168.1.55\\n192.168.1.1\\n192.168.1.105" | perl -ne 'sub ip2dec ($) { unpack N => pack CCCC => split /\./ => shift; } print ip2dec($_); print "\n";' | sort --numeric-sort | perl -ne 'sub dec2ip ($) { join ".", unpack "C4", pack "N", shift; } print dec2ip($_); print "\n"'

Výstupem je:
192.168.1.1
192.168.1.55
192.168.1.105
Určitě by to šlo i jednodušeji…
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.