linux - 使用linux脚本减去两个矩阵

标签 linux bash matrix

我想使用脚本来减去两个矩阵的值。我的文件有 .dat 或 .ext 扩展名。我相信我可以在脚本中使用一个简单的命令,我可以用它来做到这一点。我搜索了很多,但我唯一找到的是命令 diff,用它我只能找到并打印两个文件之间不同的元素。 我的文件在第一列中有日期,在其余列中有值。我想在另一个文件中写入这两个矩阵相减的结果,但保持第一列不变。谢谢。

文件的结构是这样的:

文件 1:

1890   0.6  0.7  0.0

1910   0.3  0.4  0.2

2100   0.2  0.9  0.3

文件 2:

1890  0.3  0.3   0.0

1910  0.2  0.2   0.1

2100  0.1  0.1   0.1

我想以file3结束

Fil3=File1-File2

文件 3:

1890  0.3  0.4  0.0

1910  0.1  0.2  0.1

2100  0.1  0.8  0.2

我在我的脚本中试过这个:File3 = $File1 - $File2 |猫 $File3

最佳答案

这是一个使用 bash 的解决方案:

#! /bin/bash

file1="file1.txt"
file2="file2.txt"
file3="file3.txt"

echo "Reading input files"
readarray -t mat1 < "$file1" || exit 1
readarray -t mat2 < "$file2" || exit 1

echo "Creating result"
>| "$file3" || exit 1

# Line number
n1=${#mat1[*]}
n2=${#mat2[*]}
((n = n1<n2 ? n1:n2))

for ((i=0; i<n; i++)); do
    line1=(${mat1[i]})
    line2=(${mat2[i]})

    line3=(${line1[0]})

    for ((j=1; j<=3; j++)); do
        line3+=($(echo "${line1[j]}-${line2[j]}"|bc))
    done 

    echo "${line3[@]}" >> "$file3"
done

echo "done"
exit 0

关于linux - 使用linux脚本减去两个矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26626933/

相关文章:

xcode - .htaccess 语法代码需要修改

bash - 如何写入进程 ID 并获取倒数第二个命令的退出代码

python - Numpy:将矩阵元素与矩阵数组相乘

c++ - 关于行列式计算的一段代码问题

c++ - Linux 和 Windows 返回值不同的原因是什么,如何解决?

linux - 如何检查文件夹中的所有文件是否具有相同格式

regex - 从标准输出获取匹配后的文本

git - 使用 `git filter-branch` 时是否有更好的匹配方法?

python - 将 3d 矩阵列表转换为 4d 矩阵

linux - 如何取消映射和释放 highmem 页面