タブで区切られたテーブルがあります(表1)。
a b c
A 0.5 0.2 0
B 0 0.5 0.4
C 1 0.3 0.4
D 0.2 0 0.2
タブ区切りファイル(File1)
A 0.3
B 1
C 0.5
D 0.5
Table1の各行(たとえば、行A(0.5 0.2および0))の各数字と、File1の同じ行(行A(0.3))の数字を掛けたいと思います。したがって、行Aの場合、0.5 * 0.3、0.2 * 0.3、および0 * 0.3になります。
希望の出力:
a b c
A 0.15 0.06 0
B 0 0.5 0.4
C 0.5 0.15 0.2
D 0.1 0 0.1
これを明確にするために、以下はサンプルテーブルです。この文字は列/行名を表す変数です。何百もの列と行があるかもしれません。実際の列/行名には数字を含めることができ、スクリプトはこれらの数字を変更しないでください。例えば、行「A」の名前は「ABC123」であってもよい。
助けてくれてありがとう。
答え1
1つの方法は次のとおりです。
$ awk -F"\t" '
{
if(NR==FNR){
a[$1]=$2;
}
else{
if(FNR==1){print; next}
printf "%s",$1;
for(i=2;i<=NF;i++){
printf "\t%0.2f",$i*a[$1]
}
printf "\n"
}
}' table2 table1
a b c
A 0.15 0.06 0.00
B 0.00 0.50 0.40
C 0.50 0.15 0.20
D 0.10 0.00 0.10