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

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

Substituir um Arquivo Com Informação de Outros Dois


From: Anderson - Listas
Subject: Substituir um Arquivo Com Informação de Outros Dois
Date: Wed, 13 Aug 2008 16:09:29 -0300
User-agent: Thunderbird 2.0.0.16 (X11/20080723)

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.


reply via email to

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