创建一个可以存储根据另一个文件中的值计算出的值的字段

创建一个可以存储根据另一个文件中的值计算出的值的字段

我有两个文件,第一个文件(制表符分隔)如下所示:

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解决方案:

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]]- 累积匹配“键”的值

相关内容