扩展管道链的处理(......Asterisk -> grep -> ping)

扩展管道链的处理(......Asterisk -> grep -> ping)

我想使用命令中的一个值并在不同的命令中使用它示例命令如下

 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"

通过 UNREACHABLE 的行如下。

[10 月 8 日 04:10:55] 注意 [29814] chan_sip.c:对等点“sip-437-id”现在无法访问!最后晋级:26

awk '{print $7;}'

'sip-437-id' 我得到这个信息

sort | uniq 

仅排序和 uniq 设备

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

我得到了属于 xargs wt 这个用户扩展的更多信息

* 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"

我从这些信息中得到我需要的信息。

> * 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

此信息将写在屏幕上 Addr->IP : 10.34.34.45:5063

我想ping一下IP地址并打印在信息下面

例如:

>   * 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

应该显示结果并继续处理

答案1

优化方案:

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)}'

相关内容