INVITEメッセージ(CSeq:1 INVIte)があるたびにインラインで表示されるので、最初の4行目(Calling_party_IP)と2行目(通話番号)を印刷したいと思います。
入力例:
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP calling_party_IP:58929;branch=z9hG4bK93464974;received=calling_party_IP;rport=34653
From: <sip:98745@ip>;tag=123456
To: <sip:called number@ip>;tag=as4463463edc
Call-ID: some string
CSeq: 1 INVITE
Server:
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, PRACK, MESSAGE
Supported: replaces, timer
Content-Length: 0000
サンプル出力:
calling_party_IP
called number
答え1
質問の意味についての私の推測に基づいて、私はこれを持っています。 (編集:質問が改善され、私の推測が正しいようです。)
基本的な考え方は、各行を4つの長い配列として保存し、一致するものがあれば、前の2行目と4行目を印刷することです。だから入ってください
ant
bee
cat
dog
eel
fun
Findはとをfun
印刷します。bee
dog
awk '/fun/{ print saved[(NR-4)%4],saved[(NR-2)%4]} {saved[NR%4]=$0}' file
これにより、パターンで終わる5行のブロックを重ねることができます。