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 <[EMAIL PROTECTED]> > 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]