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: Tiago Peczenyj
Subject: Re: [shell-script] Ordenar base por campo
Date: Thu, 13 May 2010 10:25:42 -0300

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]



reply via email to

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