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: Julio C. Neves
Subject: Re: [shell-script] Ordenar base por campo
Date: Thu, 13 May 2010 00:09:08 -0300

Fala Law,
dá uma olhada na opção -t (se não me engano) do sort (não uso isso há muito
tempo e me esqueci, mas acho que é isso mesmo). Vc deverá sortear segundo o
6o campo com separador ';', depois sortear com o 1o, 2o, 3o e 4o campos com
separador '.'.

Vc deverá usar tb usar a opção -n para especificar que o sort é numérico.
Veja:

$ echo '1
> 2
> 10' | sort
1
10
2
$ echo '1
2
10' | sort -n
1
2
10

Abraços,
Julio
Cursos de Shell e Zenity em 2 fins de semana?
- Aracaju turma de Shell em 12/05 - address@hidden;
- DF turma de Shell em 12/06 - ligue (61)3223-3000;
- RJ turma de Shell em 14/06 - ligue (21)2210-6061;
- Floripa turma de Shell e Zenity 12/07 – address@hidden;
- Turmas fechadas em outras cidades ligue (21)8112-9988.


Em 12 de maio de 2010 21:45, Lawrence Waclawiak
<address@hidden>escreveu:

>
>
> 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
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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