在具有多行的表中,将行中的每个值乘以相同的定义值

在具有多行的表中,将行中的每个值乘以相同的定义值

我有一个制表符分隔的表(表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

这是一种方法:

$ 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

相关内容