無効な単語シーケンスを識別するawkスクリプト

無効な単語シーケンスを識別するawkスクリプト

次のファイルがあります。

FHEAD01
THEAD02
TCUST03
TITEM04
TITEM05
IDISC06
TTEND07
TTAIL08
THEAD09
TCUST10
IDISC11....
TITEM12
TTEND13
TTAIL14
THEAD15
TITEM16
IDISC17
TTEND18
TTAIL19
THEAD20
IDISC21.....
TITEM22
TTEND23
TTAIL24
THEAD25
TITEM26
IDISC27
IDISC28
TITEM29
TTEND30
TTAIL31
FTAIL32

次の順序を認識し、記録を印刷したいと思います。

1) THEAD,TCUST,IDISC,*
2) THEAD,IDISC,*

予想される出力は、次のレコードを印刷する必要があります。

THEAD09
TCUST10
IDISC11
THEAD20
IDISC21

次のコードを試しましたが、結果はありません。

awk '/THEAD/; /TCUST/ ; /IDISC/ ' test1.dat

答え1

awk '
    /THEAD/{
        p=$0                 #store line with `THEAD`
        getline              #read next line from file
        if(/TCUST/){         #if there is `TCUST` in it
            p=p ORS $0       #add it to `p` vaiable
            getline          #and get next line from file
            }
        if(/IDISC/)          #if there is `IDISC` in line
            print p ORS $0   #print `p` variable altogether with line
    }
    ' test1.dat

関連情報