[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- RES: [shell-script] Re: checar valores,
Julio Cezar Neves - DATAPREVRJ <=