shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Ordenar base por campo


From: Bruno Gunter
Subject: Re: [shell-script] Ordenar base por campo
Date: Thu, 13 May 2010 10:57:12 -0300

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 <address@hidden>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 <address@hidden>
>
> >
> >
> > 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: address@hidden
> ---------------------------------------------------------------------
> 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]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]