AWK はパターンマッチング後のインスタンス数を計算します。

AWK はパターンマッチング後のインスタンス数を計算します。

たとえば、

  • RXOTG-1388は、RM4FD1、RM4FD2、RM4FD3の3つのオブジェクトを保持できます。
  • RXOTG-1398はVT08D1 VT08D2、VT08D3の3つのオブジェクトを保持できます。
  • など。

私が使用したいこのテキストファイルに基づいてアッ、各RXOTGが保持するオブジェクトの数。

RXOTG-1388       RM4FD1               0
                 RM4FD2               0
                 RM4FD3               0

END
RXOTG-1398       VT08D1               0
                 VT08D2               0
                 VT08D3               0

END
RXOTG-1400       VT08S1               0
                 VT08S2               0
                 VT08S3               0

END

答え1

awk '
    /^RXOTG/{
        if(count)
            print count
        printf "%s\t", $1
        count = 0
    }
    /.{6,}/{
        count++
    }
    END{
        print count
    }'

答え2

awk '/^RXOTG/{x=$1; y=0}/^RXOTG/,/^$/{y++}/^END/{print x": "y-1}' in
  • /^RXOTG/{x=$1; y=0}:現在のレコードが次から始まる場合は、RXOTG最初のフィールドの値をx合計に割り当てます。0y
  • /^RXOTG/,/^$/{y++}:現在のレコードが次に始まるレコードと空のレコードRXOTGの間の範囲にある場合に増加しますy
  • /^END/{print x": "y-1}:現在のレコードが次から始まる場合、END値を印刷してから減少した値を印刷します。x:y1
% cat in
RXOTG-1388       RM4FD1               0
                 RM4FD2               0
                 RM4FD3               0

END
RXOTG-1398       VT08D1               0
                 VT08D2               0
                 VT08D3               0

END
RXOTG-1400       VT08S1               0
                 VT08S2               0
                 VT08S3               0

END
% awk '/^RXOTG/{x=$1; y=0}/^RXOTG/,/^$/{y++}/^END/{print x": "y-1}' in
RXOTG-1388: 3
RXOTG-1398: 3
RXOTG-1400: 3

関連情報