我有两个文件,第一个(制表符分隔)如下所示:
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命令?
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,",")
-将第一个文件的第4个字段拆分为“键”数组
len
-块数
s+=a[b[i]]
-累计匹配的“键”的值
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句