awk의 각 청크/("팀")에 대해 $4와 $5의 다이제스트를 계산하고 싶습니다.
입력 예:
ABC Team
1109;BB; EE;B;M
1108;GG; KK;B;M
1104;KK; CC;F;S
1103;LL; JJ;B;XL
CBS Team
600;AA; AA;O;
597;AA; MM;O;
599;BB; JJ;B;M
593;DD; SS;B;S
UMG Team
7341;BB; TT;F;M
7339;FF; AA;B;M
7338;FF; SS;B;M
7336;GG; UU;B;XL
원하는 출력
ABC Team
1109;BB; EE;B;M
1108;GG; KK;B;M
1104;KK; CC;F;S
1103;LL; JJ;B;XL
B;M = 2
B;XL = 1
F;S = 2
CBS Team
600;AA; AA;O;
597;AA; MM;O;
599;BB; JJ;B;M
593;DD; SS;B;S
O; = 2
B;M = 1
B;S = 1
UMG Team
7341;BB; TT;F;M
7339;FF; AA;B;M
7338;FF; SS;B;M
7336;GG; UU;B;XL
F;M = 1
B;M = 2
B;XL = 1
이것은 내가 생각해낸 코드이지만 작동하지 않거나 원하는 결과를 가져온 코드를 찾을 수 없습니다. 누구든지 도와줄 수 있나요?
awk -F; "{if(NF>3) {a[$4 $5]++}} {if(NF==0) {for (pair in a) print pair, a[pair];a=0; pair=0}}1"
편집 - 위의 코드는 명확하게 형식화되어 있습니다 gawk -o-
.
{
if (NF > 3) {
a[$4 $5]++
}
}
{
if (NF == 0) {
for (pair in a) {
print pair, a[pair]
}
a = 0
pair = 0
}
}
1 {
print
}
답변1
$ cat tst.awk
BEGIN { FS=SUBSEP=";"; OFS=" = " }
NF == 0 { prt(); delete sum }
{ print }
NF > 3 { sum[$4,$5]++ }
END { prt() }
function prt( key) {
for ( key in sum ) {
print key, sum[key]
}
}
$ awk -f tst.awk file
ABC Team
1109;BB; EE;B;M
1108;GG; KK;B;M
1104;KK; CC;F;S
1103;LL; JJ;B;XL
B;XL = 1
F;S = 1
B;M = 2
CBS Team
600;AA; AA;O;
597;AA; MM;O;
599;BB; JJ;B;M
593;DD; SS;B;S
B;S = 1
O; = 2
B;M = 1
UMG Team
7341;BB; TT;F;M
7339;FF; AA;B;M
7338;FF; SS;B;M
7336;GG; UU;B;XL
B;XL = 1
F;M = 1
B;M = 2
최소한 먼저 여러 줄과 들여쓰기를 사용하여 코드를 작성하고 가급적이면 파일에 저장하세요. 이렇게 하면 운영 체제 관련 인용 문제와 환경 변수 사용 시 버그를 피할 수 있고 진행하면서 이해하고 디버그하는 것이 더 쉬워집니다. 작동하도록 노력하고 있습니다. 유용하다고 생각되면 작동 후 모든 내용을 한 줄로 작성하십시오.