
두 개의 파일이 있는데 첫 번째 파일(탭으로 구분)은 다음과 같습니다.
1 100 371 R1,R2,R4 12
5 167 16 R2,R5 5
8 242 490 R1,R3,R4 11
또 다른 하나는 다음과 같습니다.
R1 0.167
R2 0.171
R3 0.156
R4 0.162
R5 0.159
두 번째 파일의 R1, R2, ..., R5에 대해 일치하는 값의 합계를 네 번째 필드의 값으로 나눈 값을 갖는 첫 번째 파일에 필드를 하나 더 추가하고 싶습니다.
예를 들어 첫 번째 행에는 R1, R2, R4가 있으므로 내가 원하는 값은 (0.167+0.171+0.162)/12 = 0.0416667입니다.
예상 출력:
1 100 371 R1,R2,R4 12 0.0416667
5 167 16 R2,R5 5 0.066
8 242 490 R1,R3,R4 11 0.0440909
awk 명령을 작성하는 방법은 무엇입니까?
답변1
앗해결책:
awk 'NR==FNR{ a[$1]=$2; next };{ len=split($4,b,","); s=0;
for(i=1;i<=len;i++) s+=a[b[i]]; $6=s/$5 }1' file2 OFS='\t' file1 | column -tx
산출:
1 100 371 R1,R2,R4 12 0.0416667
5 167 16 R2,R5 5 0.066
8 242 490 R1,R3,R4 11 0.0440909
a[$1]=$2
- 두 번째 파일에서 키/값 캡처split($4,b,",")
- 첫 번째 파일의 네 번째 필드를 "키" 배열로 분할합니다.len
- 블록 수s+=a[b[i]]
- "키"와 일치하는 값을 누적