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