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