![다른 파일의 공통 문자열로 합계](https://linux55.com/image/57370/%EB%8B%A4%EB%A5%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EA%B3%B5%ED%86%B5%20%EB%AC%B8%EC%9E%90%EC%97%B4%EB%A1%9C%20%ED%95%A9%EA%B3%84.png)
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
블록) 전체 배열을 스캔하고 키, 값 쌍을 인쇄합니다.