[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.
- Substituir um Arquivo Com Informação de Outros Dois,
Anderson - Listas <=