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.