두 개의 "쉼표로 구분된 값 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" 
}'

관련 정보