|
From: | Michael Costa |
Subject: | Re: [shell-script] Re: Unir centenas de arquivos hosts em um unico arquivo |
Date: | Wed, 1 Mar 2017 18:09:31 -0300 |
Vou fazer passo a passo (poderia ficar menor) para facilitar o entendimento:$ cat host_xxvio* > temp$ cat temp192.168.0.194 xxvio006192.168.0.193 xxvio005192.168.0.192 xxvio004192.168.0.191 xxvio003192.168.0.190 xxvio002192.168.0.189 xxvio001192.168.0.162 nimsrv02192.168.0.161 nimsrv01127.0.0.1 loopback localhost # loopback (lo0) name/address192.168.0.194 xxvio006192.168.0.193 xxvio005192.168.0.192 xxvio004192.168.0.191 xxvio003192.168.0.190 xxvio002192.168.0.189 xxvio001192.168.0.162 nimsrv02192.168.0.161 nimsrv01127.0.0.1 localhost192.168.0.53 xxvio007192.168.0.162 nimsrv02192.168.0.161 nimsrv01127.0.0.1 localhost192.168.0.54 xxvio008192.168.0.162 nimsrv02192.168.0.181 nimsrv01127.0.0.1 loopback localhost # loopback (lo0) name/address192.168.0.83 xxvio010192.168.0.82 xxvio009192.168.0.162 nimsrv02192.168.0.161 nimsrv01Agora vamos normalizá-lo trocando diversos brancos por <TAB> e matando comentários$ sed -ir 's/ +#.*//; s/ +/\t/' temp$ cat temp192.168.0.194 xxvio006192.168.0.193 xxvio005192.168.0.192 xxvio004192.168.0.191 xxvio003192.168.0.190 xxvio002192.168.0.189 xxvio001192.168.0.162 nimsrv02192.168.0.161 nimsrv01127.0.0.1 loopback localhost192.168.0.194 xxvio006192.168.0.193 xxvio005192.168.0.192 xxvio004192.168.0.191 xxvio003192.168.0.190 xxvio002192.168.0.189 xxvio001192.168.0.162 nimsrv02192.168.0.161 nimsrv01127.0.0.1 localhost192.168.0.53 xxvio007192.168.0.162 nimsrv02192.168.0.161 nimsrv01127.0.0.1 localhost192.168.0.54 xxvio008192.168.0.162 nimsrv02192.168.0.181 nimsrv01127.0.0.1 loopback localhost192.168.0.83 xxvio010192.168.0.82 xxvio009192.168.0.162 nimsrv02192.168.0.161 nimsrv01Agora vamos classificá-lo para começar a brincadeira:$ sort -r temp -o temp$ uniq -c temp1 192.168.0.83 xxvio0101 192.168.0.82 xxvio0091 192.168.0.54 xxvio0081 192.168.0.53 xxvio0072 192.168.0.194 xxvio0062 192.168.0.193 xxvio0052 192.168.0.192 xxvio0042 192.168.0.191 xxvio0032 192.168.0.190 xxvio0022 192.168.0.189 xxvio0011 192.168.0.181 nimsrv015 192.168.0.162 nimsrv024 192.168.0.161 nimsrv012 127.0.0.1 loopback localhost2 127.0.0.1 localhostRepare que na esquerda, apareceu a qtd de repetições e eu acho que é isso que vc queria.Se for para exibir somente ou duplicados, vc pode aproveitar o que fizemos e esticar um pouquinho:$ uniq -c temp | grep -vE '^ +1 '2 192.168.0.194 xxvio0062 192.168.0.193 xxvio0052 192.168.0.192 xxvio0042 192.168.0.191 xxvio0032 192.168.0.190 xxvio0022 192.168.0.189 xxvio0015 192.168.0.162 nimsrv024 192.168.0.161 nimsrv012 127.0.0.1 loopback localhost2 127.0.0.1 localhostSeria isso?Para fazer em uma linha:$ sed -r 's/ +#.*//; s/ +/\t/' host_xxvio* | sort -r | uniq -c # | grep -vE '^ +1 'Abcs,JulioDamos treinamento em sua empresa por um preço,
no mínimo, 50% mais barato que qualquer curso,com certificado e nota fiscal.Nosso time de instrutores in company é formado somente porautores de Best Sellers laureados sobre os temas. P. exemplo:Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo CadunicoEm 1 de março de 2017 09:28, Michael Costa address@hidden [shell-script] <address@hidden.br > escreveu:Tem razão, me perdoe, segue abaixo:
[mschon@oc1707181415 xxxx]$ for i in *; do
> echo "Exibindo conteudo do arquivo: $i"
> cat $i
> echo ""
> done
Exibindo conteudo do arquivo: hosts_xxvio003
opback localhost # loopback (lo0) name/address
192.168.0.194 xxvio006
192.168.0.193 xxvio005
192.168.0.192 xxvio004
192.168.0.191 xxvio003
192.168.0.190 xxvio002
192.168.0.189 xxvio001
192.168.0.162 nimsrv02
192.168.0.161 nimsrv01
Exibindo conteudo do arquivo: hosts_xxvio004
127.0.0.1 loopback localhost # loopback (lo0) name/address
192.168.0.194 xxvio006
192.168.0.193 xxvio005
192.168.0.192 xxvio004
192.168.0.191 xxvio003
192.168.0.190 xxvio002
192.168.0.189 xxvio001
192.168.0.162 nimsrv02
192.168.0.161 nimsrv01
Exibindo conteudo do arquivo: hosts_xxvio007
127.0.0.1 localhost
192.168.0.53 xxvio007
192.168.0.162 nimsrv02
192.168.0.161 nimsrv01
Exibindo conteudo do arquivo: hosts_xxvio008
127.0.0.1 localhost
192.168.0.54 xxvio008
192.168.0.162 nimsrv02
192.168.0.181 nimsrv01
Exibindo conteudo do arquivo: hosts_xxvio009
127.0.0.1 loopback localhost # loopback (lo0) name/address
192.168.0.83 xxvio010
192.168.0.82 xxvio009
192.168.0.162 nimsrv02
192.168.0.161 nimsrv01
[mschon@oc1707181415 xxxx]$Em 28 de fevereiro de 2017 21:49, 'Julio C. Neves' address@hidden [shell-script] <address@hidden.br > escreveu:A lista não aceita anexos :(Em 28 de fev de 2017 17:54, "Michael Costa address@hidden [shell-script]" <address@hidden.br > escreveu:Estou anexando os arquivos para ajudar na analise.
Julio, desculpe, mas não entendi como testar a sua resposta.
Em 28 de fevereiro de 2017 16:01, 'Julio C. Neves' address@hidden
[shell-script] <address@hidden.br > escreveu:
>
>
> Algumas observações [in]úteis:
>
> - Normalmente, misturar sed com grep não é a melhor programação, use
> um ou o outro;
> - egrep está deprecated, prefira grep -E;
> - O uniq com opção -c te dá a qtd de duplicações, então podemos fazer
> algo com:
>
> $ paste <(sed '/^#/d; /^$/d; s/ */ /; s/ *$//; s/^ *//' | sort -r |
> uniq -c | sed -r 's/^ +([0-9]+ ).*/\1/') <(sed '/^#/d; /^$/d; s/ */ /;
> s/ *$//; s/^ *//' | sort -r | uniq)
>
> Como não tenho o arquivo, não testei, então pode ser que esteja errado.
>
>
> Abcs,
> Julio
>
> *Damos treinamento em sua empresa por *
> *um preço, no mínimo, 50% mais barato que qualquer curso,*
> *com certificado e nota fiscal.*
>
>
> Nosso time de instrutores *in company* é formado somente por
>
>
> autores
>
>
> de
> *Best Sellers *laureados sobre os temas. P. exemplo:[As partes desta mensagem que não continham texto foram removidas]
>
> Shell básico e Programação em Shell Julio Neves
> Bacula Heitor Medrado
> Zabbix Adail Host
> Produção Gráfica e Videografismo Cadunico
>
>
> Em 27 de fevereiro de 2017 09:03, Michael Costa address@hidden
> [shell-script] <address@hidden.br > escreveu:
>
>>
>>
>> Obrigado por alertar sobre o problema de espaço!
>> Consegui resolver assim:
>>
>> egrep -h -v "^$" hosts_mmvio* | egrep -v '^[a-z]|[A-Z]' | sed -e
>> "s/[[:blank:]]\{1,\}/ /g" | sort -u > hosts_unificado
>>
>> Agora ficou o lance dos duplicados para resolver
>>
>> Em 26 de fevereiro de 2017 21:56, address@hidden [shell-script] <
>> address@hidden.br > escreveu:
>>
>>>
>>>
>>> Caro Michael
>>>
>>> Não é duplicado pois os espaços são significativos, então:
>>> 127.0.0.1 localhost
>>> é diferente de
>>> 127.0.0.1 localhost
>>> pois este último tem 3 espaços a mais.
>>>
>>> O que poderia fazer é uniformizar os espaços com o sed mesmo:
>>> No lugar de:
>>> sed '/^#/d; /^$/d'
>>>
>>> Use algo como:
>>> sed '/^#/d; /^$/d; s/ */ /; s/ *$//; s/^ *//'
>>>
>>> Nesse caso eu apenas peguei uma ou mais sequência de espaços e fixei em
>>> 4 espaços e eliminei a possibilidade de haver espaços adicionais no final e
>>> no começo.
>>>
>>> Acho que isso elimina o problema, exceto pela ocorrência da primeira e
>>> segunda linha.
>>>
>>> []'s
>>> Itamar
>>>
>>
>>
>
>
[Prev in Thread] Current Thread [Next in Thread]
- Re: [shell-script] Re: Unir centenas de arquivos hosts em um unico arquivo, Michael Costa, 2017/03/01
- Re: [shell-script] Re: Unir centenas de arquivos hosts em um unico arquivo, Julio C. Neves, 2017/03/01
- Re: [shell-script] Re: Unir centenas de arquivos hosts em um unico arquivo, Michael Costa <=
- Re: [shell-script] Re: Unir centenas de arquivos hosts em um unico arquivo, Julio C. Neves, 2017/03/01
- Re: [shell-script] Re: Unir centenas de arquivos hosts em um unico arquivo, Fernando Mercês, 2017/03/03
- Re: [shell-script] Re: Unir centenas de arquivos hosts em um unico arquivo, Julio C. Neves, 2017/03/03
- Re: [shell-script] Re: Unir centenas de arquivos hosts em um unico arquivo, Michael Costa, 2017/03/17
- Re: [shell-script] Re: Unir centenas de arquivos hosts em um unico arquivo, Julio C. Neves, 2017/03/17
- Prev by Date: Re: [shell-script] Re: Unir centenas de arquivos hosts em um unico arquivo
- Next by Date: Re: [shell-script] Re: Unir centenas de arquivos hosts em um unico arquivo
- Previous by thread: Re: [shell-script] Re: Unir centenas de arquivos hosts em um unico arquivo
- Next by thread: Re: [shell-script] Re: Unir centenas de arquivos hosts em um unico arquivo
- Index(es):