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

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

Re: [shell-script] Substituir um Arquivo Com Informação de Outros Dois


From: César Vianna
Subject: Re: [shell-script] Substituir um Arquivo Com Informação de Outros Dois
Date: Wed, 13 Aug 2008 23:42:40 -0300

Complementando

IFS="
"
for i in `cat usuarios.txt`
do
 user=`cut -d";" -f1 <<< $i`
 nc=`cut -d";" -f2 <<< $i`
 cat grupos.txt|sed "s/$user/$nc/" > temp.txt
 cat temp.txt >  grupos.txt
 echo
done
rm temp.txt


Obs. Tem um parâmetro do sed que joga a saída no mesmo arquivo de entrada,
mas não recordo agora e na pesquisa rápida que fiz na lista não encontrei.

2008/8/13 César Vianna <address@hidden>

> Segue uma sugestão:
>
> Formato do arquivo usuarios.txt
>
> x;Nome Completo
>
>
> Formato do arquivo grupos.txt
>
> grupo:x:y
>
>
> Script para substituição:
>
> ########
> IFS="
> "
> for i in `cat usuarios.txt`
> do
>  user=`cut -d";" -f1 <<< $i`
>  nc=`cut -d";" -f2 <<< $i`    #nc é o nome completo
>  echo $user - $nc
>  cat grupos.txt|sed "s/$user/$nc/"
> done
> ########
>
>
>
>
>
>
> 2008/8/13 Anderson - Listas <address@hidden>
>
>   Pessoal, estou precisando de uma ajuda com um pequeno script que estou
>> montando.
>>
>> Não é algo complicado de se fazer, mas algo que com pouco experiência
>> não estou conseguindo.
>>
>> Vamos ao problema:
>>
>> Tenho dois arquivos:
>>
>> grupos.txt, que o conteudo dele é o seguinte:
>> grupo:*:usuario1,usuario2,usuario3 (resultado do comando # getent group
>> > grupos.txt)
>>
>> usuarios.txt, que tem as informações dos usuários (resultado do comando
>> # getent passwd > usuarios.txt)
>>
>> Tratei o usuarios.txt da seguinte forma: # cat usuarios.txt | cut -d:
>> -f1,5 | tr : ' ' para que pegasse apenas o nome de usuário e o nome
>> completo das pessoas, e substituisse os : por espaço, ficando o arquivo
>> com o seguinte formato:
>> usuario Nome Completo do Usuário, o que também tratei e deixei assim:
>> usuario "Nome Completo do Usuário".
>>
>> Agora o que quero fazer:
>>
>> pegar todos os usuários pelo username e substituir pelo nome completo no
>> arquivo grupos.txt, para que, ao invés de ficar vomo está, ele me
>> mostre o nome completo de cada pessoa que faz parte do grupo, ficando
>> assim:
>>
>> Grupo1:*:Nome Completo, Nome Completo 2, Nome Completo 3
>>
>> Então o que pensei, pego a primeira referência de cada arquivo, e com um
>> sed eu substituo. Se fosse fazer na mão, ficaria algo como:
>> # cat grupos.txt | sed 's/usuario/\"Nome Completo\"/'
>>
>> Isso funciona para cada um, mas se fosse para fazer manualmente não
>> estaria fazendo um script ;-)
>>
>> Com isso resolvi fazer um laço para pegar o conteúdo de cada linha e
>> jogar em uma variável para fazer a substituição do arquivo, o que
>> começou mais ou menos assim:
>>
>> #!/bin/bash
>> for i in $(cat usuarios.txt | cut -d' ' -f1) ;
>> do
>> VAR1=$i
>> done ;
>>
>> for j in $(cat usuarios.txt | cut -d\" -f2) ;
>> do
>> VAR2=$j
>> done ;
>>
>> E foi ai que me enrosquei. Pois, somente com isso, ele irá listar as
>> linhas e jogá-las nas variáveis, mas com esse laço for vai ocorrer que
>> as variáveis irão armazenar, dessa forma, a ultima ocorrência dos dois
>> laços, correto? Então pensei que esses laçoes devam estar dentro de um
>> while, talves, checando algo como:
>>
>> CONT=`cat usuarios.txt | wc`
>> while [ $CONT -ge 0 ] ...
>>
>> E com isso pegar cada linha do cat, para que ele faça algo como, pege a
>> VAR1 e compare com a linha do grupo que possua o mesmo nome de usuário e
>> substitua por VAR2.
>>
>> Mas depois disse me enrosquei e fiquei na mão. Talvés existam formas, e
>> acredito que sim, muito mais fáceis de fazer isso, mas didaticamente
>> falando, poderiam dizer como terminar esse script, e se puderem oferecer
>> uma solução amigável além da explicação seria bom para o aprendizado e
>> para que da próxima vez eu não tenha que escrever um romance para obter
>> ajuda.
>>
>> Obrigado pela atenção.
>>  
>>
>
>
>
> --
> César Vianna
> -------------------
> "Talvez porque eu pense demais ou sonhe demais, o certo é que não distingo
> entre a realidade que existe e o sonho, que é a realidade que não existe."
> Fernando Pessoa
>



-- 
César Vianna
-------------------
"Talvez porque eu pense demais ou sonhe demais, o certo é que não distingo
entre a realidade que existe e o sonho, que é a realidade que não existe."
Fernando Pessoa


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



reply via email to

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