awkまたはsedを使用して最初の4行を印刷しますか? [閉鎖]

awkまたはsedを使用して最初の4行を印刷しますか? [閉鎖]

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印刷します。beedog

awk '/fun/{ print saved[(NR-4)%4],saved[(NR-2)%4]} {saved[NR%4]=$0}' file

これにより、パターンで終わる5行のブロックを重ねることができます。

関連情報