1250개의 문자열을 90k 패턴과 일치시키는 것이 왜 그렇게 느린가요?

1250개의 문자열을 90k 패턴과 일치시키는 것이 왜 그렇게 느린가요?

내 문자열은 파일 경로입니다. 예를 들어 s/14/11/13/15/n7ce49B_235_25ed2d70.jpg내 패턴은 모두 n7ce49B_.+.

GNU grep 2.6.3아래에서 달리고 있어요데비안 6.0.10존재하다델 DL360G7서버(이 시스템의 성능에 대한 아이디어를 제공하기 위해 언급함)에는 15k HDD가 있으며 다음 명령은 time LC_ALL=C grep -E -f path_to_patterns_file path_to_strings_file완료할 수 없습니다. 서버 스왑이 끔찍합니다. 20,000개 패턴을 ​​만드는 데 3시간 이상이 걸립니다.

이것은 나에게 합리적이지 않은 것 같습니다.

의견 요청에 따라 다음 문서가 제공됩니다.파일 경로 20k 패턴

다음을 통해 입력 라인 및 패턴 수를 테스트하고 조정할 수도 있습니다.

xxd -p /dev/urandom | fold -sw 100 | head -n 1250 |
  grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)

답변1

이전 버전의 GNU grep에서 성능 문제가 발생했습니다(버그 #22357)해결됨이를 통해 제출, 2.28에 출시되었지만 변경됨일부 회귀를 도입했습니다.grep이므로 GNU 3.0 이상을 사용해야 합니다 .

관련 정보