2012-08-06 2 views
-3

csv 데이터 파일은 총 3.2GB이며, god는 몇 개의 행과 열 (매우 큰 것으로 가정)인지 알고 있습니다. 이 파일은 개인 개체군에 대한 SNP 데이터가있는 유전체 데이터입니다. 따라서 CSV 파일에는 TD102230과 같은 ID와 A/AA/T과 같은 유전자 데이터가 포함되어 있습니다.대용량 csv 파일을 perl로 바꿔야 함

이제는 Text::CSVArray::Transpose 모듈을 사용했지만 컴퓨팅 클러스터 에서처럼 제대로 작동하지 않는 것처럼 보였습니다. 이 작업을 수행 할 특정 모듈이 있습니까? 필자는 Perl에 익숙하지 않습니다 (저수준 프로그래밍에서는별로 경험이 없었습니다, 주로 R과 MATLAB을 사용했습니다). 그래서 자세한 설명이 특히 환영합니다!

+0

파일을 한 번에로드하려고 시도하고 컴퓨터가 나를 매우 가혹하게 처벌했습니다. – awacs

답변

0

, 당신은 Text::CSV와 과정을, 라인으로 파일 라인을 읽을 join 새로운 각 배열과 배열에 값 원래 열에 해당하고 단지 출력을 밀거나 원래의 전치 표현을 얻을 수 좋아한다 . join 바로 뒤에 각 배열을 폐기하면 메모리 문제에도 도움이됩니다.

배열 대신 외부 파일에 값을 쓰고 OS 기능을 사용하여 메모리 요구 사항을 해결하는 또 다른 방법입니다.

이유를 생각해야합니다. 정말로 혼자서 전이하는 것이 진정한 목적이 아니기 때문에 실제 업무를 해결할 더 좋은 방법은 없습니까?

+0

하나의 형식으로 데이터를 사용하는 다른 프로그램을 사용하고 있지만 원시 데이터는 트랜스 포즈이므로 데이터를 뒤집어 쓰려고합니다. – awacs

0

메모리를 절약하기 위해 여러 단계로 작업을 나누십시오.

  1. 라인을 읽고 라인 번호 다음에 이름이 지정된 파일에 필드를 작성하십시오. 필드 당 한 줄씩 출력하십시오.
  2. 입력 된 CSV 파일을 모두 사용할 때까지 1 단계를 반복합니다.
  3. paste을 사용하면 모든 출력 파일을 큰 파일로 병합 할 수 있습니다. 직접 답변으로
+0

전치를 위해'paste' 대신'cat'을 써야합니까? –

+0

이것은 소스 파일의 세로 좌표 또는 가로 좌표를 주축으로 선택하는지에 따라 다릅니다. 필자의 솔루션은 프로그램하기가 쉽고 입력을 한 번만 통과하면된다는 보장이 있습니다. – daxim

관련 문제