他のファイルの値から計算された値を格納できるフィールドの作成

他のファイルの値から計算された値を格納できるフィールドの作成

2つのファイルがあり、最初のファイル(タブ区切り)は次のとおりです。

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

2番目のファイルのR1、R2、...、R5の一致する値の合計を4番目のフィールドの値で割った値を持つ最初のファイルにもう1つフィールドを追加したいと思います。

たとえば、最初の行に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- 2番目のファイルからキー/値をキャプチャ

  • split($4,b,",")- 最初のファイルの4番目のフィールドを「キー」配列に分割します。

  • len- ブロック数

  • s+=a[b[i]]- 「キー」に一致する値を累積

おすすめ記事