Command

在兩個“逗號分隔值 csv”文件之間劃分相同單元格中的數字

  • July 19, 2016

我有兩個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 . . . 
. . . . . .
. . . . . .

PS。我可以在 Matlab 中完成。但我想知道如何在 Unix/Linux 命令下實現這一點。

如果您將 GNU octave 視為“Unix/Linux 命令”,那麼您可以簡單地做

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

幾天前對類似架構的問題有一些有趣的答案。以首選答案為基礎,您可以

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" 
}'

引用自:https://unix.stackexchange.com/questions/296730