Acho que seria melhor fazer um split no IP em cada ponto e listar cada bloco individualmente em uma grandeza de 3 números. Depois, sortar o resultado.
[]'s Gunter Em 13 de maio de 2010 10:25, Tiago Peczenyj <[email protected]>escreveu: > Talvez seja o seu exemplo mas eu consegui ordenar os ips da mesma forma que > vc usando um sort apenas > > $ sort -t \; -k 6 -n database > r1 > $ gsed -r 's/(^.*;(([0-9]{1,3}\.){3})([0-9]{1,3});.*$)/\4;\1/' database > |sort -n |gsed -r 's/^[0-9]{1,3};//' > r2 > $ diff -s r1 r2 > Files r1 and r2 are identical > > estou usando o sort 5.93 em um bsd > > olhando bem, seria interessante que o sort pudesse receber uma expressao > como um comparador usando uma sintaxe awk-like, quem sabe um dia. > > 2010/5/12 Lawrence Waclawiak <[email protected]> > > > > > > > Boa noite pessoal! > > > > A missão agora é ordenar a uma base de dados usando como referencia o > > valor de um campo em especifico no caso esse campo é o 6° separado por > > ";" e contém endereços IPs de uma mesma rede. > > O formato da base é o seguinte: > > nome;mac;local;so;gw;ip;status;comentario; > > > > O exemplo da base e o comando que usei para solucionar está em > > http://pastebin.com/xX70UNC7 > > > > Primeiro problema, o campo IP não é o primeiro, sendo assim fazer um > > "sort" não vai adiantar nada > > > > Segundo problema, mesmo que o campo ip fosse o primeiro, com o sort eu > > não consegui organizar endereços ips, tentei com várias opções do man e > > nada. > > Por exemplo, se fizer um sort nos seguintes ips: > > > > echo "10.10.50.50 > > 10.10.50.6" |sort > > > > 10.10.50.50 > > 10.10.50.6 > > > > Ele não consegue organizar, independente da flag passada para o sort ( > > -n -g -d ) > > > > A solução que arrumei foi a seguinte: Obs esse comando tbm encontra-se > > aki com a formatação preservada: http://pastebin.com/xX70UNC7 > > > > cat $Database |sed -r > > 's/(^.*;(([0-9]{1,3}\.){3})([0-9]{1,3});.*$)/\4;\1/' |sort -n |sed -r > > 's/^[0-9]{1,3};//' > > > > Explicando: Eu crio um retrovisor \1 que casa com toda a linha, mas no > > meio crio outros retrovisores para fatiar o ip e então crio uma nova > > linha que é igual a original porém começando com um novo campo que > > contém a ultima casa do endereço ip recureprado com o retrovisor \4, > > então passo um sort -n e em seguida com o sed removo esse novo campo que > > havia sido criado. > > > > Funcionar funciona, mas achei muito poluída essa minha solução. > > Alguém sabe um forma mais limpa e eficiente de fazer isso? > > > > Grato pela atenção, > > Lawrence Waclawiak > > > > > > > > > > -- > Tiago B. Peczenyj > Linux User #405772 > > http://pacman.blog.br > > > [As partes desta mensagem que não continham texto foram removidas] > > > > ------------------------------------ > > --------------------------------------------------------------------- > Esta lista não admite a abordagem de outras liguagens de programação, como > perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio > aviso. > --------------------------------------------------------------------- > Sair da lista: [email protected] > --------------------------------------------------------------------- > Esta lista é moderada de acordo com o previsto em > http://www.listas-discussao.cjb.net > --------------------------------------------------------------------- > Servidor Newsgroup da lista: news.gmane.org > Grupo: gmane.org.user-groups.programming.shell.brazil > > Links do Yahoo! Grupos > > > [As partes desta mensagem que não continham texto foram removidas]
