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

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

Re: Res: [shell-script] Validar campos em arquivo


From: microbiu
Subject: Re: Res: [shell-script] Validar campos em arquivo
Date: Sun, 27 Jun 2010 11:25:26 +0000

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 address@hidden sent:
> obrigado a todos que me ajudaram, consegui aqui.
>  
> ________________________________
> De: Marcio Gil 
> Para: address@hidden
> 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]
>          
> 



reply via email to

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