Publicada por Sd_Ribeiro em 18/06/2007 - 19:58h:
* Sd_Ribeiro usa Debian

Saudações Rubro-Negras!!!! (Bom ele tá meio fraquinho, mas passa ainda seremos Hexa).
Bom minha dúvida é sobre um exercício de shell script.
O código é esse:
#!/bin/bash
echo -n "Informe o numero de identificacao: "
read id
id1=`grep "^$id" nomes.dat | cut -f1`
if [ "$id1" != "" ]
then
cod=`grep "^$id1" telefones.dat | cut -f2 telefones.dat`
tels=`grep "$id1" telefones.dat`
echo "$tels"
fi
Os arquivos são:
nomes.dat:
100   Suzana Alves
101   Maria Joaquina
102   Castro Alves
103   Suzana Vieira

telefones.dat:
1000   100   1111-0000
1001   100   1111-1111
1002   100   2222-2222
1003   101   3333-3333
1004   102   (27) 4444-4444
1005   102   5555-5555
1006   102   +55 (28) 6666-6666
1007   103   7777-7777
1008   103   8888-8888

Erro: toda vez a digito a idnome 100 ele imprime no tela todo o arquivo, nas outras como 101, 102, 103 ele imprime corretamente só o referente ao código. Eu coloquei o "^" na 1º variável, mas não resolveu.
Ajudem-me!!!!!!

  
 
Resposta de removido em 18/06/2007 - 23:15h:
* removido usa Nenhuma
* removido tem conceito: nenhum voto.
 


Sd_Ribeiro, corrija seu código, na atribuição da variável tels a filtragem está pegando qualquer sequencia dos digitos '100', então entra '1000', '1001', '1002', etc ...
Uma solução seria pegar o número 100 cercado por 1 espaço na esquerda e outro na direita: grep "\ $id\ " telefones.dat | cut -d' ' -f2
Outra observação que faço é quanto ao arquivo telefones.dat, o terceiro campo dele não está bem padronizado, ficará dificil conseguir uma expressão regular para filtrá-lo, pois eles não têm a mesma regra. Compare o primeiro e o sétimo registro por exemplo.

#!/bin/bash
echo -n "Informe o numero de identificacao: "
read id
id1=`grep "^$id" nomes.dat | cut -d' ' -f1`
if [ "$id1" != " " ]
then
cod=`grep "^$id1" telefones.dat | cut -d' ' -f2`
tels=`grep "\ $id1\ " telefones.dat`
echo "$tels"
fi

  


ATENÇÃO: Antes de contribuir com uma resposta, leia o artigo Qualidade de respostas e certifique-se de que esteja realmente contribuindo com a comunidade. Muitas vezes o ímpeto de contribuir nos leva a atrapalhar ao invés de ajudar.

Contribuir com resposta



CAPTCHA
[ Recarregar imagem ]

Digite o código acima:

  
* Nota: só é possível enviar respostas usuário que possui conta e esteja logado com ela, caso contrário sua mensagem será perdida.



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts