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:24:16 -0300

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


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



reply via email to

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