gpt4 book ai didi

bash - 如何使用 bash 或 awk 对多个文件中的矩阵求和

转载 作者:行者123 更新时间:2023-11-29 09:38:10 25 4
gpt4 key购买 nike

如果我有任意数量的文件,比如 n 个文件,并且每个文件都包含一个矩阵,我如何使用 bash 或 awk 对每个文件中的所有矩阵求和并获得输出?

比如n=3,我有这3个文件,内容如下

$猫mat1.txt

1 2 3
4 5 6
7 8 9

$猫mat2.txt

1 1 1
1 1 1
1 1 1

$猫mat3.txt

2 2 2 
2 2 2
2 2 2

我想得到这个输出:

$猫输出.txt

4 5 6
7 8 9
10 11 12

是否有一个简单的衬垫可以做到这一点?

谢谢!

最佳答案

$ awk '{for (i=1;i<=NF;i++) total[FNR","i]+=$i;} END{for (j=1;j<=FNR;j++) {for (i=1;i<=NF;i++) printf "%3i ",total[j","i]; print "";}}' mat1.txt mat2.txt mat3.txt
4 5 6
7 8 9
10 11 12

这将自动适应不同大小的矩阵。我认为我没有使用过任何 GNU 功能,因此这应该可以移植到 OSX 和其他地方。

工作原理:

此命令从每个矩阵的每一行读取,一次一个矩阵。

  • 对于读取的每一行,执行以下命令:

    for (i=1;i<=NF;i++) total[FNR","i]+=$i

    这遍历行中的每一列并将其添加到数组total

    GNU awk 有多维数组,但为了可移植性,这里没有使用它们。 awk 的数组是关联的,这通过用逗号将文件的行号 FNR 和列号 i 组合在一起来创建索引。结果应该是可移植的。

  • 读取完所有矩阵后,打印total中的结果:

    END{for (j=1;j<=FNR;j++) {for (i=1;i<=NF;i++) printf "%3i ",total[j","i]; print ""}}

    这里,j 遍历每一行直到总行数 FNR。然后 i 遍历每一列直到总列数 NF。对于每一行和每一列,总数通过 printf "%3i ",total[j","i] 打印。这会将总数打印为 3 个字符宽的整数。如果您的数字是 float 的或更大,请相应地调整格式。

    在每一行的末尾,print "" 语句会打印一个换行符。

关于bash - 如何使用 bash 或 awk 对多个文件中的矩阵求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26681708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com