2013-08-05 2 views
0

180 만 레코드가있는 파일에서 동일한 줄을 제거하고 새 파일을 만들려고합니다. 다음 명령을 사용 :스크립트를 사용하여 180 만 레코드로 파일 정렬

sort tmp1.csv | uniq -c | sort -nr > tmp2.csv 

스크립트를 실행하면 다음과 같은 정보를 사용하여 새 파일 sort.exe.stackdump를 만듭니다

"Exception: STATUS_ACCESS_VIOLATION at rip=00180144805 
.. 
.. 
program=C:\cygwin64\bin\sort.exe, pid 6136, thread main 
cs=0033 ds=002B es=002B fs=0053 gs=002B ss=002B" 

스크립트는 10 개 라인과 작은 파일을 사용할 수 있습니다. sort.exe처럼 많은 레코드를 처리 할 수 ​​없습니다. 180 만 개가 넘는 레코드가있는 대용량 파일로 어떻게 작업합니까? 우리는 ACCESS 이외의 데이터베이스가 없으며 ACCESS에서 수동으로이 작업을 수행하려고했습니다.

+0

SORT.EXE (무엇이든간에)가 재귀 알고리즘을 사용하고있는 것처럼 보입니다. 스택을 불고 있습니다. CSV를 Access로 가져 와서 ORDER BY 절을 사용하는 쿼리에서 정렬하고 새 CSV로 내보내는 것이 어떻습니까? –

+0

180 만 건의 기록은 실제로 그렇게 많이 말하지 않습니다. 각 레코드의 크기 (또는 파일의 크기)는 얼마나됩니까? – Dukeling

+1

@Dukeling, 오류 메시지에서 Cygwin과 같은 파일에 문제가 없어야합니다. 모든 디스크가 임시 파일로 가득 차 있지는 않은지 확인하는 것이 좋습니다. –

답변

0

: 어디는 디스크 사용 양을 조절하는 플래그로 연주 해보십시오

AWK를 'V [$ 0] ++ '$ FILE2> tmp.csv

여기서 $ FILE2는 중복 값이있는 파일 이름입니다.

0

정렬 명령이 부러진 것처럼 들립니다. cygwin이 말하는 경로에 GNU sort라고 가정하고 있는데, 일반적으로 충분한 메모리와 디스크 공간이 주어지면이 작업에 아무런 문제가 없어야합니다. ! 다음 awk 명령은 누구와도 바꿀 수없는 다이애나 값을 제거하는 훨씬 더 빠른 방법이 될 듯 http://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html

관련 문제