[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Validar campos em arquivo
From: |
Marcio Gil |
Subject: |
Re: [shell-script] Validar campos em arquivo |
Date: |
Sat, 26 Jun 2010 09:24:53 -0300 |
User-agent: |
Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.9.1.10) Gecko/20100512 Thunderbird/3.0.5 |
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.