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

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

Res: [shell-script] Validar campos em arquivo


From: Leandro Valiengo
Subject: Res: [shell-script] Validar campos em arquivo
Date: Sat, 26 Jun 2010 19:18:11 -0700 (PDT)

obrigado a todos que me ajudaram, consegui aqui.

 



________________________________
De: Marcio Gil <address@hidden>
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 < 10 )) ; then i=0$i ; fi
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]