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

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

RES: [shell-script] Re: checar valores


From: Julio Cezar Neves - DATAPREVRJ
Subject: RES: [shell-script] Re: checar valores
Date: Tue, 1 Feb 2005 17:53:18 -0300

sem teste, portanto a possibilidade de eroo é muito grande.

limpa ()
{
    ar[1]=
    ar[2]=
    ar[99]=
}
limpa
while read seq num
do
    case $seq in
        01) [ ${ar[*]} ] && { echo Epa faltou 99 antes de $num; limpa; }
            ar[1]=$num
            ;;
        02) [ ${ar[1]} ] || { echo Faltou 01 antes de $num; ar[1]=1; }
            [ ${ar[99]} ] && { echo Faltou 01 e 99 antes de $num; ar[99]= ;
}
            ;;
        99) [ ${ar[1]} ] || echo Faltou 01 antes de $num
            [ ${ar[2]} ] || echo Faltou 02 antes de $num
            limpa
            ;;
         *) echo Sequência inválida em $num
    esac
done

[ ]s,
Julio
:wq


| -----Mensagem original-----
| De: Miranda [mailto:address@hidden]
| Enviada em: terça-feira, 1 de fevereiro de 2005 17:26
| Para: address@hidden
| Assunto: Re: [shell-script] Re: checar valores
| 
| 
| 
| não consigo vislumbrar uma soluçao
| simples em shell para esse problema
| Usaria , talvez ponteiros e/ou arrays em linguagem C.
| 
| On Tuesday 01 February 2005 16:13, lferreir1 wrote:
| > OK Miranda, então vamos lá!
| >
| > Olá pessoal, boa tarde!
| >
| > É o seguinte, tenho um arquivo já filtrado de um ouro arquivo texto
| > enorme.
| >
| > Neste arquivo eu tenho dois campos:
| > O $1 é o número da linha ( cat -n )
| > O $2 precisa obrigatoriamente ter as sequências 00 01 99 voltando
| > novamente para 00 01 99 e assim vai...
| > Exemplo:
| > # cat teste.txt
| > 1     00
| > 2     01
| > 45    99
| > 46    00
| > 47    01
| > 185   99
| > ......
| > 1865  00
| > 1866  01
| > 2030  99
| > #
| >
| > Como faço para checar a sequência no campo 2? Lembrando que 
| se estiver
| > faltando ( por exemplo ) um 99, quero receber uma mensagem dizendo
| > que na linha X está faltando o 99, e o script tem que dar 
| continuidade
| > da verificação do próximo registro.
| > Exemplo ( note que está faltando a linha 45 )
| > # cat teste.txt
| > 1     00
| > 2     01
| > 46    00
| > 47    01
| > 185   99
| > ......
| > 1865  00
| > 1866  01
| > 2030  99
| > #
| >
| > Atencao!, falta um 99 na linha 45
| >
| > Grato outra vez pela atenção!
| > Luiz
| >
| >
| >
| >
| >
| > --- Em address@hidden, Miranda <miranda@m...>
| > escreveu
| >
| > > você quer dizer que pode estar faltando algum ?
| > > como em
| > > 00
| > > 01
| > > 00
| > > 01
| > > 99
| > >
| > > faltando o primeiro dos 99 ?
| > > aí já complicou bastante
| > >
| > > Por que você não posta o problema
| > > inicial ?
| > > Esse seu primeiro passo pode estar complicando
| > > o restante do processo ...
| > >
| > > On Monday 31 January 2005 13:04, lferreir1 wrote:
| > > > Oi Miranda, blz?
| > > >
| > > > Testei o seu comando, porém ele se perdeu a partir da linha onde
| > > > realmente nao tinha o 99 (linha 57), e após esta linha, foi
| > > > displayando "Erro na linha..." ( ver abaixo )
| > > >
| > > > >awk -f ./teste1 teste2
| > > >
| > > > Erro na Linha 57
| > > > Erro na Linha 58
| > > > Erro na Linha 59
| > > > Erro na Linha 60
| > > > Erro na Linha 61
| > > > Erro na Linha 62
| > > > Erro na Linha 63
| > > > Erro na Linha 64
| > > > .........
| > > > Erro na Linha 120
| > > > Erro na Linha 121
| > > > Erro na Linha 122
| > > > Erro na Linha 123
| > > > Erro na Linha 124
| > > >
| > > >  Outra coisa que não mencionei nesta dúvida, é o seguinte:
| > > >  O arquivo original que está com problemas tem 6387 registros.
| > > >  Filtrei este aquivo para que o resultado fosse o 
| número da linha,
| > > >  e o dois primeiros campos, sendo que o segundo campo 
| foi filtrado
| > > >  com o uniq.
| > > >
| > > > > cat -n arquivo | cut -c1-9 | uniq -f1
| > > >
| > > >  Sendo assim, o meu script precisa "checar" se no campo 
| 2 está OK
| > > >  e se não estiver, "pego" o número da linha ($1 ) onde está
| >
| > faltando
| >
| > > >  o próximo número e asim vai, até tratar todos os registros para
| > > > netão enviar um e-mail para o responsável acertar o arquivo
| >
| > original.
| >
| > > >  Expliquei ou compliquei??
| > > >
| > > >  Agradeço,
| > > > Luiz
| > > >
| > > >
| > > > --- Em address@hidden, Miranda <miranda@m...>
| > > > escreveu
| > > >
| > > > > Veja se é isso :
| > > > > [miranda@guitar miranda]$ cat /tmp/Dy
| > > > > 00
| > > > > 01
| > > > > 99
| > > > > 00
| > > > > 02
| > > > > 99
| > > > > 00
| > > > > 01
| > > > > 99
| > > > > 00
| > > > > 01
| > > > > 98
| > > > > 00
| > > > > 01
| > > > > 99
| > > > > 01
| > > > > 01
| > > > > 99
| > > > > 00
| > > > > 01
| > > > > 99
| > > > > [miranda@guitar miranda]$ cat /tmp/x.awk
| > > > > $1 != (NR-1)%3 && (NR - 1)%3 != 2 {printf"Erro na Linha %
| >
| > d\n",NR }
| >
| > > > > $1 != 99 && (NR - 1)%3 == 2 {printf"Erro na Linha %d\n",NR }
| > > > > [miranda@guitar miranda]$
| > > > >
| > > > > [miranda@guitar miranda]$ awk -f /tmp/x.awk /tmp/Dy
| > > > > Erro na Linha 5
| > > > > Erro na Linha 12
| > > > > Erro na Linha 16
| > > > >
| > > > > no arquivo de comandos do awk , x.awk temos
| > > > > (NR - 1) é o numero da linha quando contada a partir de zero
| > > > > (NR - 1)%3  é o resto da divisão por 3
| > > > >
| > > > > On Monday 31 January 2005 10:17, lferreir1 wrote:
| > > > > > Salve colegas!
| > > > > >
| > > > > > Tenho um arquivo texto com os seguintes conteúdos:
| > > > > > 00
| > > > > > 01
| > > > > > 99
| > > > > > 00
| > > > > > 01
| > > > > > 99
| > > > > > ..
| > > > > > ..
| > > > > > 00
| > > > > > 01
| > > > > > 99
| > > > > >
| > > > > > Como podem perceber, existe uma lógica sequencial, onde
| > > > > > obrigatoriamente
| > > > > > o primeiro registro tem que ser 00, o segundo 01, o terceiro
| >
| > é 99,
| >
| > > > > > e começa novamente com 00, depois 01 ....
| > > > > >
| > > > > > Como faço para checar se este sequencial está certo?
| > > > > > Se tiver algum registro errado, tem que me dar uma mensagem,
| >
| > porém
| >
| > > > > > continuar com a checagem.
| > > > > >
| > > > > > Adianto que o arquivo original foi filtrado pelo seguinte
| >
| > comando:
| > > > > > # cat -n arquivo | cut -c1-9 | uniq -f1
| > > > > >
| > > > > > E o valor da variavel do campo dois foi pelo awk $2,
| > > > > > portanto eu tenho tb o valor da linha em questão.
| > > > > >
| > > > > > Grato,
| > > > > > Luiz
| > > > > >
| > > > > >
| > > > > >
| > > > > >
| > > > > >
| > > > > >
| > > > > >
| > > > > >
| > > > > > 
| --------------------------------------------------------------
| >
| > ----
| >
| > > > ---
| > > >
| > > > > > Esta lista não admite a abordagem de outras liguagens de
| > > >
| > > > programação, como
| > > >
| > > > > > perl, C etc. Quem insistir em não seguir esta regra será
| >
| > moderado
| >
| > > > sem
| > > >
| > > > > > prévio aviso.
| > > > > > 
| --------------------------------------------------------------
| >
| > ----
| >
| > > > --- Sair
| > > >
| > > > > > da lista: address@hidden
| > > > > > 
| --------------------------------------------------------------
| >
| > ----
| >
| > > > ---
| > > >
| > > > > > Esta lista é moderada de acordo com o previsto em
| > > > > > http://www.listas-discussao.cjb.net
| > > > > > 
| --------------------------------------------------------------
| >
| > ----
| >
| > > > ---
| > > >
| > > > > > Links do Yahoo! Grupos
| > > >
| > > > 
| ------------------------------------------------------------------
| >
| > ---
| >
| > > > Esta lista não admite a abordagem de outras liguagens de
| >
| > programação, como
| >
| > > > perl, C etc. Quem insistir em não seguir esta regra 
| será moderado
| >
| > sem
| >
| > > > prévio aviso.
| > > > 
| ------------------------------------------------------------------
| >
| > --- Sair
| >
| > > > da lista: address@hidden
| > > > 
| ------------------------------------------------------------------
| >
| > ---
| >
| > > > Esta lista é moderada de acordo com o previsto em
| > > > http://www.listas-discussao.cjb.net
| > > > 
| ------------------------------------------------------------------
| >
| > ---
| >
| > > > Links do Yahoo! Grupos
| >
| > 
| ---------------------------------------------------------------------
| > Esta lista não admite a abordagem de outras liguagens de 
| programação, como
| > perl, C etc. Quem insistir em não seguir esta regra será 
| moderado sem
| > prévio aviso.
| > 
| --------------------------------------------------------------
| ------- Sair
| > da lista: address@hidden
| > 
| ---------------------------------------------------------------------
| > Esta lista é moderada de acordo com o previsto em
| > http://www.listas-discussao.cjb.net
| > 
| ---------------------------------------------------------------------
| >
| > Links do Yahoo! Grupos
| >
| >
| >
| 
| 
| ---------------------------------------------------------------------
| Esta lista não admite a abordagem de outras liguagens de 
| programação, como perl, C etc. Quem insistir em não seguir 
| esta regra será moderado sem prévio aviso.
| ---------------------------------------------------------------------
| Sair da lista: address@hidden
| ---------------------------------------------------------------------
| Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
 
Links do Yahoo! Grupos




 




reply via email to

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