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

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

Re: Comparar retorno de comando com conteúdo numérico de arquivo


From: nerobarrabas
Subject: Re: Comparar retorno de comando com conteúdo numérico de arquivo
Date: Wed, 07 Nov 2012 23:53:21 -0000
User-agent: eGroups-EW/0.82

Opa! já acertei.
Valeu André.
Fico devendo um panetone pro final do ano. rsrsrs
Ficou assim:
#############
#!/bin/bash
FILE1=$1
FILE2=$2
varCOMPARE=$(sdiff $FILE1 $FILE2 > /dev/null 2> /dev/null)
RESULT="$?";
if [ $RESULT -eq 0 ] ; then
echo "OK";
exit 0;
else
echo -n "NOT OK: ";
IFS=$'\n' ; for i in `sdiff $FILE1 $FILE2 | grep \|`; do
LINE="`echo $i | sed -e 's/\s*|\s*/-/' -e 's/[A-Za-z ]//g' | bc `";
NAME="`echo $i | sed -e 's/ [0-9].*//g'`";
if [ $LINE -gt 0 ] ; then
echo -n "$NAME=$LINE ";
fi
done
echo ""
exit 2;
fi


--- Em address@hidden, "nerobarrabas" <diramos@...> escreveu
>
> Grande André!
> Show de bola.
> Funcionou "quase" perfeito.
> Só esses dois detalhes:
> - Caso o retorno do arquivo B seja menor que o do arquivo A, tem que retornar 
> OK. O script está retornando NÃO OK (no caso do Alarm notification)
> - As strings tem que retornar numa linha só, assim:
> NOT OK - Changes to lock:90, Lost of signal:30
> 
> Eu vou tentar mexer aqui, mas se puder dar uma sugestão, por favor.
> De qualquer forma, já resolveu meu problema.
> 
> Grato.
> 
> Diramos
> 
> --- Em address@hidden, André Saunite <saunite@> escreveu
> >
> > Opa...
> > 
> > Eu tenho certeza que tem jeito melhor, e dependendo das strings que você 
> > tem (se tiver número no nome ou o caracter "|"), vai dar errado, mas 
> > aqui vai:
> > 
> > $ cat a
> > Changes to lock 10
> > Lost of signal 500
> > Alarm notification 30
> > CRC4 error 0
> > 
> > $ cat b
> > Changes to lock 100
> > Lost of signal 530
> > Alarm notification 20
> > CRC4 error 0
> > 
> > $ ./doit.sh a a
> > OK
> > 
> > $ ./doit.sh a b
> > NOT OK
> > Changes to lock: -90
> > Lost of signal: -30
> > Alarm notification: 10
> > 
> > $ cat doit.sh
> > #!/bin/bash
> > FILE1=$1
> > FILE2=$2
> > sdiff $FILE1 $FILE2 > /dev/null 2> /dev/null
> > RESULT="$?";
> > if [ $RESULT -eq 0 ] ; then
> >      echo "OK";
> >      exit 0;
> > else
> >      echo "NOT OK";
> > fi
> > IFS=$'\n' ; for i in `sdiff $FILE1 $FILE2 | grep \| `; do
> >      LINE="`echo $i | sed -e 's/\s*|\s*/-/' -e 's/[A-Za-z ]//g' | bc `";
> >      NAME="`echo $i | sed -e 's/ [0-9].*//g'`";
> >      echo "$NAME: $LINE";
> > done
> > 
> > Abraços!
> > André Saunite
> > 
> > On 11/07/2012 03:56 PM, nerobarrabas wrote:
> > >
> > > Mestres,
> > > Eu já procurei bastante e não consegui resolver o problema abaixo.
> > > Tenho o seguinte retorno de comando (o qual já tratei):
> > >
> > > Changes to lock 10
> > > Lost of signal 500
> > > Alarm notification 30
> > > CRC4 error 0
> > > .
> > > .
> > > .
> > > Esse retorno eu gravo num arquivo.
> > > Em seguida, dou o comando de novo e me retorna, por exemplo:
> > >
> > > Changes to lock 100
> > > Lost of signal 530
> > > Alarm notification 20
> > > CRC4 error 0
> > > .
> > > .
> > > .
> > > Notem que os valores da última coluna da 1ª e a 2ª linhas sofreram 
> > > acréscimo, o da 3ª sofreu decréscimo e o da 4ª permaneceu o mesmo.
> > > O que eu preciso:
> > >
> > > - Comparar um a um os valores do retorno do comando com os do arquivo.
> > > - Caso os do retorno sejam iguais ou menores que os do arquivo, 
> > > simplesmente substituir o conteúdo do arquivo com os novos valores e 
> > > retornar um OK.
> > > - Caso sejam maiores, retornar um NÃO OK e a seguinte string (do 
> > > exemplo acima). com a diferença entre os valores atuais e os antigos:
> > >
> > > Erros encontrados: Changes to lock=90, Lost of signal=30
> > >
> > > - E substituir os novos valores no arquivo.
> > > Notem que o arquivo tem mais linhas, mas sempre com quantidade de 
> > > linhas e strings fixas, alterando só os valores numéricos.
> > >
> > > Poderiam dar uma luz?
> > >
> > > Grato desde já.
> > >
> > > Diramos
> > >
> > > 
> > 
> > 
> > 
> > [As partes desta mensagem que não continham texto foram removidas]
> >
>



reply via email to

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