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

관련 정보