Estender o processamento da cadeia de pipelines (… Asterisk - grep - ping)

1

Eu quero usar um dos valores de um comando e usá-lo em um comando diferente Exemplo de Comando é o seguinte

 cat /var/log/asterisk/full |
   grep "UNREACHABLE" |
   awk '{print $7;}'|
   sort | uniq |
   xargs -I % asterisk -rx 'sip show peer %'|
   grep "Callerid\|Useragent\|Name\|Addr->IP"

As linhas que passam UNREACHABLE são as seguintes.

[Oct 8 04:10:55] NOTICE[29814] chan_sip.c: Peer 'sip-437-id' is now UNREACHABLE! Last qualify: 26

awk '{print $7;}'

'sip-437-id' Eu recebo esta informação

sort | uniq 

apenas o dispositivo de classificação e uniq

 xargs -I % asterisk -rx 'sip show peer %'

Eu recebo mais informações de xargs com essa extensão de usuário

* Name       : sip-437-id
Secret       : <Set>
MD5Secret    : <Not set>   
Remote Secret: <Not set>   
Context      :default   
Subscr.Cont. : default   
Language     :   
AMA flags    :Unknown   
Transfer mode: open   
CallingPres  : 
Presentation Allowed,Not Screened   
Callgroup    :   
Pickupgroup  :   
MOH Suggest  :  
Mailbox      : 492@default   
VM Extension : asterisk   
LastMsgsSent : 0/0   
Call limit   : 2   
Max forwards : 0   
Dynamic      : Yes  
Callerid     : "TELEPHONE" <492>   
MaxCallBR    : 384 kbps   
Expire   : 1671   
Insecure     : no   
Force rport  : No   
ACL          : Yes  
DirectMedACL : No   
T.38 support : No   
T.38 EC mode : Unknown T.38
> MaxDtgrm: 4294967295   
DirectMedia  : No   
PromiscRedir : No  
> User=Phone   : No   
Video Support: No   
Text Support : No   
Ign SDPver  : No   
Trust RPID   : Yes   
Send RPID    : Yes   
TrustIDOutbnd:Legacy   
Subscriptions: Yes   
Overlap dial : Yes   
DTMFmode     :rfc2833   
Timer T1 : 500   
Timer B      : 32000   
ToHost       :  
Addr->IP     : 10.34.34.45:5063   
Defaddr->IP  : (null)   
Prim.Transp. : UDP   
Allowed.Trsp : UDP   Def. U
sername: sip-492-id   
SIP Options : (none)   
Codecs       : 0x10c (ulaw|alaw|g729)   
Codec Order  : (g729:20,ulaw:20,alaw:20)   
Auto-Framing : No   
Status       : OK (26 ms)   
Useragent    : Yealink SIP-T20P 9.61.0.85   
Reg. Contact : sip:sip-437-id @10.34.34.45:5063   
Qualify Freq : 60000 ms   
Sess-Timers : Accept   
Sess-Refresh : uas   
Sess-Expires : 1800 secs   
Min-Sess   : 90 secs   
RTP Engine   : asterisk   
Parkinglot   :   
Use Reason   : No   
Encryption   : No
grep "Callerid\|Useragent\|Name\|Addr->IP"

Eu recebo as informações de que preciso com essas informações.

> * Name       : sip-437-id
> Callerid     : "TELEPHONE" <492>
> Addr->IP     : 10.34.34.45:5063
> Useragent    : Yealink SIP-T20P 9.61.0.85
> Addr->IP     : 10.34.34.45:5063

esta informação será escrita na tela   End. > IP: 10.34.34.45:5063

Eu quero fazer o ping do endereço IP e imprimi-lo sob as informações

por exemplo:

>   * Name       : sip-437-id   
> Callerid     : "TELEPHONE" <492>
> Addr->IP     : 10.34.34.45:5063   
> Useragent    : Yealink SIP-T20P 9.61.0.85 
> PING 10.34.34.45 (10.34.34.45) 56(84) bytes of data. 64 bytes from
> 10.34.34.45: icmp_req=1 ttl=62 time=6.22 ms 64 bytes from
> 10.34.34.45: icmp_req=2 ttl=62 time=6.25 ms

deve mostrar o resultado e continuar processando

    
por Tahir ERGEÇ 11.10.2017 / 16:45

1 resposta

1

Solução otimizada:

awk '/UNREACHABLE/{ print $7 }' /var/log/asterisk/full | sort -u \
    | xargs -I % asterisk -rx 'sip show peer %' \
    | grep "Callerid\|Useragent\|Name\|Addr->IP" \
    | awk -F':' '1;/Addr->IP/{ system("ping -c4 "$2)}'
    
por 11.10.2017 / 17:57