파일에 있는 개체의 일치 개수 가져오기

파일에 있는 개체의 일치 개수 가져오기

다음과 같은 항목이 포함된 대용량 파일이 있습니다.

entry-id: 1
sn: John
cn: Smith
empType: A
ADID: 123456

entry-id: 2
sn: James
cn: Smith
empType: B
ADID: 123456

entry-id: 3
sn: Jobu
cn: Smith
empType: A
ADID: 123456

entry-id: 4
sn: Jobu
cn: Smith
empType: A
ADID: 

각 항목은 개행 문자로 구분됩니다. empType A를 사용하여 항목 수를 계산해야 하며 ADID 뒤에 값(총 2개)이 있어야 합니다. awk, grep 및 egrep을 사용해 보았지만 여전히 운이 없습니다. 어떤 아이디어가 있나요?

답변1

Awk해결책:

awk '/empType: /{ f=($2=="A"? 1:0) }f && /ADID: [0-9]+/{ c++ }END{ print c }' file
  • f- empType: A부분 처리를 나타내는 플래그
  • cempType: AADID- 패딩 키를 이용한 입장횟수

산출:

2

답변2

""빈 줄을 레코드 구분 기호로 사용 RS하고 새 줄을 \n필드 구분 기호로 사용하는 또 다른 awk 솔루션은 다음과 같습니다.FS

BEGIN {RS=""; FS="\n"}
{
    split($4,a,": ")
    split($5,b,": ")
}
a[2]=="A" && b[2]!="" {c++}
END {print c}

스크립트를 실행할 수 있습니다.

awk -f main.awk file

답변3

두 가지 간단한 grep방법 중데이터입력 파일은 다음과 같습니다.

grep -A1 'empType: A' data | grep -c 'ADID: .\+'

산출:

2

답변4

의 경우 perl다음과 같을 수 있습니다.

perl -l -00ne '
  my %f = /(.*?):\s*(.*)/g;
  ++$n if $f{empType} eq "A" && $f{ADID} ne "";
  END {print 0+$n}' < file
  • -n주어진 코드가 -e각 입력 레코드에 적용되도록 합니다.
  • -00단락으로 기록됩니다.
  • %f키와 값이 (key):spaces(value)레코드의 각 키와 값 에 매핑되는 연관 배열을 만듭니다 .
  • $n조건이 충족되면 증가합니다.
  • 인쇄합니다 $n( 일치하는 항목이 없는 경우 빈 문자열을 얻지 않도록 END추가됨 ).00

관련 정보