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


Responder a