명령에서 값을 가져와 다른 명령에 사용하고 싶습니다. 예제 명령은 다음과 같습니다.
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)}'