oi pessoal, ainda nao fechei a solucao, porém o q me enviaram me serviu em parte.
Me desculpem, isso nao acontecerá mais. ________________________________ De: "micro...@terra.com.br" <micro...@terra.com.br> Para: shell-script@yahoogrupos.com.br Enviadas: Domingo, 27 de Junho de 2010 8:25:26 Assunto: Re: Res: [shell-script] Validar campos em arquivo Amigão, é de boa prática em listas de discussões e fórums de dúvidas em geral postar a sua solução. flw! Eric On Sáb 26/06/10 23:18 , Leandro Valiengo leandro_valie...@yahoo.com.br sent: > obrigado a todos que me ajudaram, consegui aqui. > > ________________________________ > De: Marcio Gil > Para: shell-script@yahoogrupos.com.br > Enviadas: Sábado, 26 de Junho de 2010 9:24:53 > Assunto: Re: [shell-script] Validar campos em arquivo > > Em 25/6/2010 16:51, Leandro Valiengo escreveu: > > Fala gente, será que podem me ajudar? > > > > > > Tenho um arquivo com esse detalhe: > > > > 00 = Proposta > > 01, 02, 03... - Titulos > > > > 00ICATULEANDRO --> Proposta da Icatu para o Leandro > > 01LEANDRO --> Titulo do Leandro > > 02LEANDRO --> Titulo do Leandro > > 00ACC --> Proposta da ACC para o Leandro > > 01LEANDRO --> Titulo do Leandro > > 03LEANDRO --> Titulo do Leandro > > > > Obrigatóriamente comeco com 00 q é minha proposta e abaixo dela, > tenho q ter pelo menos um titulo, começando com 01. > > > > Se eu tiver o exemplo abaixo, carrego o arquivo: > > > > 00ICATULEANDRO > > 01LEANDRO > > 02LEANDRO > > > > Se eu tiver o exemplo abaixo, abendo o processo e reenvio o > arquivo para o parceiro: > > > > 00ACC > > 01LEANDRO > > 03LEANDRO > > > > Quero fazer essa pré-validacao por shell. > > > > Tem algo em mente? > > > > Abracos, > > > > Valiengo > > > Sugestão com sed: > X=$(sed > 's/(..).*/:1/;:a;N;/n(00).*/s//:1/;//!s/n(..).*/1/;ba' > temp.txt)":" > echo $X > :000102:000103: > Y=$(echo $X | sed "s/:00(01(02(03)?)?)?:/:/g") > echo $Y > :000103: > if [ "$Y" = ":" ] ; then echo "Válido" ; else echo "Inválido" ; fi > Inválido > O problema com esta solução é que deve haver um limite para o > número de > linhas em cada bloco, então se limitamos a dez: > Y=$(echo $X | sed > "s/:00(01(02(03(04(05(06(07(08(09(10)?)?)?)?)?)?)?)?)?)?:/:/g") > Se o limite for 100... você já deve ter percebido o problema :-) > Mas talvez uma solução com awk seja mais simples, talvez até > resolva em > uma linha... > Ou então você pode verificar com um loop: > n=1 > i="!" > for s in `sed 's/^(..).*/1/' temp.txt` ; do > if [ "$s" = "00" ] ; then > i="00" > elif [ "$s" != "$i" ] ; then > echo "Inválido na linha " $n > i="$s" > fi > n=$(( $n + 1 )) > i=$(( $i + 1 )) > if (( $i done > Marcio Gil. > [As partes desta mensagem que não continham texto foram removidas] > > [As partes desta mensagem que não continham texto foram removidas]