コマンドから値を取得し、他のコマンドに使用したいと思います。コマンド例は次のとおりです。
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
デバイスのみの並べ替えと一意性
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 に記録されます。
IPアドレスをpingして情報の下に印刷したいです。
たとえば、
> * 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)}'