在两个“逗号分隔值 csv”文件之间的相同单元格中划分数字

在两个“逗号分隔值 csv”文件之间的相同单元格中划分数字

我有两个Comma-separated values (csv)文件。每个文件有 1000 列和 1000 行(即每个 csv 文件形成一个 1000x1000 的矩阵)

The values for every cell in the first csv file represent the mean.
The values for every cell in the second csv file represent the standard deviation.

我想创建新的 csv 文件(也是 1000x1000)。这个新 csv 文件中的每个单元格代表变异系数 (CV) { cv=std/mean}

如何将第二个 csv 文件中的单元格除以第一个 csv 文件中的单元格以获得此新的 csv 电子表格

例如 (每个 csv 文件仅包含两列的一部分来澄清问题):

First csv:
2 4 . . . .
2 4 . . . .
2 2 . . . .
2 8 . . . .
. . . . . .
. . . . . .

Second csv:
8 2 . . . .
8 4 . . . .
8 2 . . . .
8 2 . . . .
. . . . . .
. . . . . .

New csv:
4 0.5 . . . 
4 1 . . . .
4 1 . . . .
4 0.25 . . . 
. . . . . .
. . . . . .

附言。我可以用Matlab做。但我想知道如何在 Unix/Linux 命令下实现这一点。

答案1

如果你把 GNU Octave 算作一个“Unix/Linux 命令”,那么你可以简单地做

octave -qf << "EOF"
m = csvread("first.csv");
s = csvread("second.csv");
csvwrite("new.csv", s ./ m);
EOF

答案2

有一些有趣的答案问题几天前有类似的架构。以首选答案为基础,你可以这样做

paste -d, file{1,2} | 
awk -F, '
{ for (i=1; i<=NF/2; i++)
    printf "%s%f", (i>1?", ":""), $(NF/2+i) / $i
  printf "\n" 
}'

相关内容