2つのファイルがありますComma-separated values (csv)
。各ファイルには1000列と1000行があります(つまり、各csvファイルは1000×1000行列を形成します)。
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スプレッドシートを取得するには、2番目のcsvファイルのセルを最初のcsvファイルのセルに分割できますか?
たとえば(各csvファイルには、問題を明確にするために2つの列の一部のみが含まれています。):
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コマンドでこれを達成する方法を知りたいです。
答え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"
}'