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

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

Re: [shell-script] Re: Unir centenas de arquivos hosts em um unico arqui


From: Julio C. Neves
Subject: Re: [shell-script] Re: Unir centenas de arquivos hosts em um unico arquivo
Date: Wed, 1 Mar 2017 19:07:47 -0300

Não precisa comprar todas, basta ter uma após a 5a. edição, que sempre que sai uma nova, público o changelog na minha página

Em 1 de mar de 2017 18:09, "Michael Costa address@hidden [shell-script]" <address@hidden> escreveu:
 

Acho que anos de treino não chegaria neste nivel!
Muito obrigado Julio... vc foi brilhante!
Compro todas as edições dos seus livros, é um modo de incentivar e agradecer seu trabalho e a atenção que nos dá.

Muito obrigado!

Em 1 de março de 2017 10:21, 'Julio C. Neves' address@hidden [shell-script] <address@hidden.br> escreveu:
 

Vou fazer passo a passo (poderia ficar menor) para facilitar o entendimento:

$ cat host_xxvio* > temp
$ cat temp
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
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
127.0.0.1    localhost
192.168.0.53    xxvio007
192.168.0.162     nimsrv02
192.168.0.161     nimsrv01
127.0.0.1    localhost
192.168.0.54    xxvio008
192.168.0.162     nimsrv02
192.168.0.181     nimsrv01
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

Agora vamos normalizá-lo trocando diversos brancos por <TAB> e matando comentários

$ sed -ir 's/ +#.*//; s/  +/\t/' temp
$ cat temp
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
127.0.0.1 loopback localhost
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
127.0.0.1 localhost
192.168.0.53 xxvio007
192.168.0.162 nimsrv02
192.168.0.161 nimsrv01
127.0.0.1 localhost
192.168.0.54 xxvio008
192.168.0.162 nimsrv02
192.168.0.181 nimsrv01
127.0.0.1 loopback localhost
192.168.0.83 xxvio010
192.168.0.82 xxvio009
192.168.0.162 nimsrv02
192.168.0.161 nimsrv01

Agora vamos classificá-lo para começar a brincadeira:

$ sort -r temp -o temp
$ uniq -c temp
      1 192.168.0.83 xxvio010
      1 192.168.0.82 xxvio009
      1 192.168.0.54 xxvio008
      1 192.168.0.53 xxvio007
      2 192.168.0.194 xxvio006
      2 192.168.0.193 xxvio005
      2 192.168.0.192 xxvio004
      2 192.168.0.191 xxvio003
      2 192.168.0.190 xxvio002
      2 192.168.0.189 xxvio001
      1 192.168.0.181 nimsrv01
      5 192.168.0.162 nimsrv02
      4 192.168.0.161 nimsrv01
      2 127.0.0.1 loopback localhost
      2 127.0.0.1 localhost

Repare 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 xxvio006
      2 192.168.0.193 xxvio005
      2 192.168.0.192 xxvio004
      2 192.168.0.191 xxvio003
      2 192.168.0.190 xxvio002
      2 192.168.0.189 xxvio001
      5 192.168.0.162 nimsrv02
      4 192.168.0.161 nimsrv01
      2 127.0.0.1 loopback localhost
      2 127.0.0.1 localhost

Seria isso?

Para fazer em uma linha:

$ sed -r 's/ +#.*//; s/  +/\t/' host_xxvio* | sort -r | uniq -c    #    | grep -vE '^ +1 '


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:

Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico


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


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

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





reply via email to

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