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]]
- 「キー」に一致する値を累積