다음과 같은 항목이 포함된 대용량 파일이 있습니다.
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
부분 처리를 나타내는 플래그c
empType: A
ADID
- 패딩 키를 이용한 입장횟수
산출:
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
추가됨 ).0
0