다른 파일의 값에서 계산된 값을 저장할 수 있는 필드 만들기

다른 파일의 값에서 계산된 값을 저장할 수 있는 필드 만들기

두 개의 파일이 있는데 첫 번째 파일(탭으로 구분)은 다음과 같습니다.

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]]- "키"와 일치하는 값을 누적

관련 정보