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

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

Ordenar base por campo


From: Lawrence Waclawiak
Subject: Ordenar base por campo
Date: Wed, 12 May 2010 21:45:46 -0300
User-agent: Thunderbird 2.0.0.23 (X11/20090817)

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




reply via email to

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