awk로 인해 메모리 누수가 발생하나요?

awk로 인해 메모리 누수가 발생하나요?

나는 거대한 데이터 파일(약 1억 라인)을 처리하기 위해 awk를 사용하고 있습니다.

내 표현은 이렇다 -

tac <myfile> | awk -F',' 'OFS=\",\" {if(/^#/){print;}else{\$1=tolower(\$1);if(!seen[\$1]++)print;}}'|")

그러나 awk에 메모리 누수가 있음을 발견했습니다. 누군가 여기서 메모리 사용량을 지적할 수 있습니까?

감사해요!

답변1

귀하가 제공한 라인 수에 따라 교체할 수도 있다고 생각합니다...

다음 Perl 스크립트는 디스크의 B-트리(데이터베이스에서 일반적임)를 배열로 사용합니다. RAM 메모리를 거의 사용하지 않습니다.

$ cat remdup
#!/usr/bin/perl

use DB_File;
tie %seen, 'DB_File', "mydbfile.db", O_RDWR|O_CREAT|O_TRUNC ,0666, $DB_BTREE;

while(<>){
  if(/^#/)        { print; }
  elsif(/(.*?),/) { $a=lc($1);
                    print if( ! $seen{$a}++)}
}

그럼에도 불구하고 처리하는 데 오랜 시간이 걸립니다(5년 된 노트북에서 100만 행을 처리하는 데 16초).

용법:tac file | perl remdup > output

편집: 솔루션을 실행하는 경우 언제 실행하는지 알려주세요.

관련 정보