다른 파일의 공통 문자열로 합산

다른 파일의 공통 문자열로 합산

file1사용자가 파일에 나타나는 횟수가 다음과 같은 파일이 있습니다 .

4 userC
2 userA
1 userB

file2사용자와 다음과 같은 기타 정보가 포함된 또 다른 파일이 있습니다 .

userC, degree2
userA, degree1
userB, degree2

각 학위에 대해 사용자가 나타나는 횟수를 보여주는 출력을 원합니다.

5 degree2
2 degree1

답변1

순수한 awk:

$ awk -F'[, ]' 'NR==FNR{n[$2]=$1;next}{m[$3]+=n[$1]}
    END{for(i in m){print i " " m[i]}}' \
    file1 file2
degree1 2
degree2 5

또는 다음과 같은 스크립트에 넣을 수도 있습니다.

#!/usr/bin/awk -f 
BEGIN {
    FS="[, ]"
}
{
    if (NR == FNR) {
        n[$2] = $1;
        next;
    } else {
        m[$3] += n[$1];
    }
}
END {
    for (i in m) {
        print i " " m[i];
    }
}

먼저 필드 구분 기호를 쉼표와 공백으로 설정합니다(즉, BEGIN블록 또는 -F명령줄 옵션입니다.

그런 다음 첫 번째 파일(관용구 FNR == NR)을 구문 분석할 때 사용자 이름별로 색인화된 배열에 사용자에 대한 연결 수를 넣습니다. 다음 파일을 구문 분석할 때 사용자 그룹별로 인덱스된 배열에 각 사용자의 연결 수를 추가합니다.

마지막으로 ( END블록) 전체 배열을 스캔하고 키, 값 쌍을 인쇄합니다.

관련 정보