複数の行を持つテーブルの行の各値に、同じ定義値を掛けます。

複数の行を持つテーブルの行の各値に、同じ定義値を掛けます。

タブで区切られたテーブルがあります(表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

関連情報