2011-05-13 12 views
1

아래 코드는 필자의 perl 스크립트에서와 똑같이 작동합니다. 그러나 매우 큰 파일을 실행하는 데 영원히 걸립니다. 누군가 내 grep 명령에 대한 perl 대안을 알고 있습니까? perl의 grep --after-context

my $print = `grep --after-context=3 $line $inputfile`; 
print OUTFILE $print 

은 위의 코드를 설명합니다 : 그것은 단순히 ( $inputfile라고 함) 입력 파일에 ( $line이라고 함) 라인을 찾아하는 것이 발견 원정합니다 ( $inputfile에서) 경기 다음 세 줄을 인쇄 내 OUTFILE ( OUTFILE)을했다.

건배!

답변

6

grep 서브 프로세스를 실행에 약간의 오버 헤드가이지만, 그것은 고정 된 양이있어, 파일의 크기와 관련이없는. 당신이 grep의 아주 나쁜 구현을 가지고하지 않는 한, 너는 안가고있어. o 순수한 Perl에서 검색 시간을 향상시킬 수 있어야합니다. 사실, Perl을 사용하여 큰 파일을 검색하는 것은 grep보다 느릴 수 있습니다.이 파일은 파일 검색 전용으로 만 사용됩니다.

첫 번째 경기 만 찾는 경우 grep 명령에 --max-count=1을 추가 할 수 있습니다. 이로 인해 grep이 파일의 나머지 부분을 읽는 대신 즉시 종료되어 추가 일치 항목을 찾습니다.

2

일반적인 검색 패턴을 말하지 않았습니다. 특정 상황에서는 -F 옵션으로 작업 속도를 높이고 환경을 설정하여 NLS를 비활성화 할 수 있습니다. LANG=C, 의미는 manual입니다.

+0

OP는 패턴이 고정되어 있음을 암시하는 것처럼 보이므로'-F'는 매우 좋은 제안입니다. 패턴이 완전히 고쳐지지 않아도 사용되는 정규 표현식이 불필요하게 복잡 할 가능성이 있습니다. – Cascabel