IF ignorando linha [RESOLVIDO]

1. IF ignorando linha [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 25/02/2013 - 17:10h

Olá,

Tenho as linhas:
IAX2/Telefonica-3261;macro-dial-one;s;42;Up;Dial;SIP/7916,15,trMauto-blkv;4731213811;00:04:31;SIP/7916-000002ab;
SIP/8114-000002ac;macro-dialout-trunk;s;20;Up;Dial;IAX2/b3assw/9947355153388;8114;00:00:55;IAX2/b3assw-13119;


Eu preciso ignorar as linhas que NÃO COMECEM com SIP
para isso fiz a tratativa:

VALIDA=$(echo ${i} | cut -c 1-3)

if [ $VALIDA == "SIP" ];then
manter a linha

else
ignora a linha
fi

O problema eh que nao sei a sintaxe para ignorar ou pular a linha

grato



  


2. MELHOR RESPOSTA

cr0n
_di0

(usa FreeBSD)

Enviado em 26/02/2013 - 11:21h

Não vejo motivos de não usar o AMI disponibilizado pela equipe do Asterisk. Com Perl você resolveria isso com poucas linhas e com mais clareza, por exemplo:


$hashref->{channel}->{'CallerID'};


Essa linha, evitaria aquele amontoado de comandos para filtrar um simples dado que se deseja obter.

Mas de todo modo, se você quer evitar que linhas que não iniciam com SIP sejam exibidas, use:


grep ^SIP | grep -v Channel | grep -v active | grep -v calls | grep -Eiv "None|Outgoing|Ringing|Local" |tr -s " " ";" | sed 's/[()]//g'


Isso evita o tratamento, que por sinal é desnecessário.

3. Re: IF ignorando linha [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 25/02/2013 - 17:12h

obs: não sei se eh util mas estou lendo o arquivo assim



for i in $(sudo asterisk -rx 'core show channels verbose' | grep -v Channel | grep -v active | grep -v calls | grep -Eiv "None|Outgoing|Ringing|Local" |tr -s " " ";" | sed 's/[()]//g'); do



4. Re: IF ignorando linha [RESOLVIDO]

cr0n
_di0

(usa FreeBSD)

Enviado em 25/02/2013 - 18:34h

Conforme enfatizei no seu outro tópico, sugiro utilizar o Perl com o módulo apropriado para manusear comandos através da interface disponibilizada pelo Asterisk, mesmo que se trate de algo trivial. Ficará mais elegante, mais fácil de alterar e mais fácil de trabalhar com os dados. Esse comando está monstruoso.


5. Re: IF ignorando linha [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 26/02/2013 - 08:17h

_di0 escreveu:

Conforme enfatizei no seu outro tópico, sugiro utilizar o Perl com o módulo apropriado para manusear comandos através da interface disponibilizada pelo Asterisk, mesmo que se trate de algo trivial. Ficará mais elegante, mais fácil de alterar e mais fácil de trabalhar com os dados. Esse comando está monstruoso.


No caso teria que fazer esse tratamento no proprio script mesmo para nao inserir dados inuteis no banco


6. Re: IF ignorando linha [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 26/02/2013 - 08:59h

Tentei isso, mas não funcionou =/


LINHA=$(echo ${i} | cut -c 1-200)
SIP=$(echo ${i} | cut -c 1-3)

if [ $SIP != "SIP" ];then
$SIP=grep -v $LINHA
fi



7. Re: IF ignorando linha [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 26/02/2013 - 09:37h

Assim tbm nao funcinou

for i in $(cat core.txt | grep -v Channel | grep -v active | grep -v calls | tr -s " " ";" | sed 's/[()]//g'); do

RAMAL=$(echo ${i} | cut -f2 -d"/" | cut -d"-" -f1)
CANAL=$(echo ${i} | cut -d";" -f1)
DURACAO=$(echo ${i} | rev | cut -f3 -d";" | rev)
LINHA=$(echo ${i} | cut -c 1-200)
SIP=$(echo ${i} | cut -c 1-3)

if [ $SIP != "SIP" ];then
${i++}
#echo ${i}
fi



8. Re: IF ignorando linha [RESOLVIDO]

cr0n
_di0

(usa FreeBSD)

Enviado em 26/02/2013 - 10:37h

O que você quer fazer?


9. Re: IF ignorando linha [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 26/02/2013 - 11:03h

Eu executo um comendo que gera resultados do tipo:

SIP/7960-00000095 macro-dial s 7 Up Dial Local/FMPR-7967@from-inte 7960 00:26:56 SIP/7967-00000096
LOCAL/8888-00000095 macro-dial s 7 Up Dial Local/FMPR-7967@from-inte 7960 00:26:56 SIP/7877-00000096
IAX2/4360-00000095 macro-dial s 7 Up Dial Local/FMPR-7967@from-inte 7960 00:26:56 SIP/4367-00000096


E assim varias linhas, para tratar isso eu fiz o script que substitui espaços por ';', e estou cortando sempre as 3 primeiras letras da linha, pegando assim o valor no exemplo linha1- SIP , linha2-LOC, linha3=IAX2

Acontece que soh me interessam as linhas que comecem com SIP, ai fiz um IF que verifica se as 3 primeiras letras eh SIP, se for, eu mantenho a linha, se não for, eu pulo a linha. Ficou assim:

for i in $(sudo asterisk -rx 'core show channels verbose' | grep -v Channel | grep -v active | grep -v calls | grep -Eiv "Outgoing" |tr -s " " ";" | sed 's/[()]//g'); do
#for i in $(cat core.txt | grep -v Channel | grep -v active | grep -v calls | tr -s " " ";" | sed 's/[()]//g'); do

RAMAL=$(echo ${i} | cut -f2 -d"/" | cut -d"-" -f1)
CANAL=$(echo ${i} | cut -d";" -f1)
DURACAO=$(echo ${i} | rev | cut -f3 -d";" | rev)
BRIDGED=$(echo ${i} | rev | cut -f2 -d";" | rev)
LINHA=$(echo ${i})
SIP=$(echo ${i} | cut -c 1-3)

if [ $SIP != "SIP" ];then
i=$((i++))
fi

#echo $SIP

echo -------------------------------------------------------------------------------
echo $LINHA
echo RAMAL = $RAMAL
echo "INSERT INTO PEERS (CHANNELS, DUCRACAO, BRIDGED) VALUES ($CANAL, $DURACAO, $BRIDGED);"
done


porem o i++ não esta funcionando. Entendeu?




10. Re: IF ignorando linha [RESOLVIDO]

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 26/02/2013 - 11:18h

Corrige a linha
VALIDA=$(echo ${i} | cut -c 1-3) 

para
VALIDA=$(echo "$i" | cut -c 1-3) 



11. Re: IF ignorando linha [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 26/02/2013 - 11:28h

_di0 escreveu:

Não vejo motivos de não usar o AMI disponibilizado pela equipe do Asterisk. Com Perl você resolveria isso com poucas linhas e com mais clareza, por exemplo:


$hashref->{channel}->{'CallerID'};


Essa linha, evitaria aquele amontoado de comandos para filtrar um simples dado que se deseja obter.

Mas de todo modo, se você quer evitar que linhas que não iniciam com SIP, sejam exibidas, use:


grep ^SIP | grep -v Channel | grep -v active | grep -v calls | grep -Eiv "None|Outgoing|Ringing|Local" |tr -s " " ";" | sed 's/[()]//g'


Isso evita o tratamento, que por sinal é desnecessário.


Dio, vc manja de asterisk?

Não entendo muito por isso estou usando shellscript.
Pode me explicar melhor o que essa soluçao faz? '$hashref->{channel}->{'CallerID'};' , e se ela pegar o valor da coluna, como faço para inserir no banco?

Se for isso mesmo parece bem interessante





12. Re: IF ignorando linha [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 26/02/2013 - 11:39h

Dio, tava dando uma lida sobre AMI como vc citou, porem soh roda a partir do asterisk 1.8+ neh?



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts