AWK 计算模式匹配后有多少个实例

AWK 计算模式匹配后有多少个实例

例如:

  • RXOTG-1388 可容纳 3 个物体 RM4FD1,RM4FD2,RM4FD3
  • RXOTG-1398 可容纳 3 个物体 VT08D1 VT08D2,VT08D3
  • 等等。

根据这个文本文件,我想使用awk,每个 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

相关内容