2017-02-10 3 views
1

2つの入力ファイルの積からファイルを作成するためのawkの助けが必要です。2つのファイルからの乗算の生成を使用してawkでファイルを作成する

ファイル1は850,000行と50,001列のSNPデータを持ちます。最初の列は、ID

IDを持つファイル1における3行の実施例及び第4のSNP

A 1 2 1 2 
B 2 2 2 1 
C 1 1 1 1 

ファイル2 50,000 SNPの効果の1行を有しています。

0.2 -0.1 0.4 0.5 

マイ所望の出力は、IDと各SNP時間の合計であるSNPの効果、すなわち

Aは、任意の助けが理解されるであろう1*0.2 + 2*-0.1 + 1*0.4 + 2*0.5 = 1.4

A 1.4 
B 1.5 
C 1 

あろう。

ロディ

+0

50K要素ベクトルの和積丸め誤差する傾向がある、あなたは、加算の順序に注意を払う必要がある場合があります。 – karakfa

答えて

3

このawkはワンライナーは、あなたのために働く必要があります。

awk 'NR==FNR{split($0,a);next}{s=0;for(i=2;i<=NF;i++)s+=a[i-1]*$i;print $1,s}' file2 file1 
3

あなたは、次のawkスクリプトを使用することができます。

:複数行バージョンとして

awk 'FNR==NR{split($0,a);next}{t=0;for(i=2;i<=NF;i++){t+=$i*a[i-1]};print $1,t}' b.txt a.txt 

良い読めます

cal.awk

# True for the first input file (the one with the factors) 
# See: https://www.gnu.org/software/gawk/manual/html_node/Auto_002dset.html#Auto_002dset 
FNR==NR{ 
    # split factors into array a 
    split($0,a) 
    next 
} 
{ 
    t=0 # total 
    # Iterate through fields 
    for(i=2;i<=NF;i++){ 
     # ... and aggregate t 
     t+=$i*a[i-1] 
    } 
    print $1,t # Output the id along with t 
} 

このようにそれを呼び出します。

awk -f calc.awk b.txt a.txt 
関連する問題