80GB 이상의 간단한 텍스트 파일 데이터베이스가 들어있는 디렉토리가 있는데, 자주 grep해야 할 필요가 있습니다. 이런 이유로, 나는 GNU를 비교하기위한 몇 가지 테스트를 시도하고있다. grep
내가 말할 수있는 한, 현재 야생에서 가장 빠른 대안이 무엇인지 - ripgrep - 내 데이터로 어느 것이 가장 빨리 작동하는지 확인하십시오.
첫 번째 테스트는 세 가지로 구성됩니다. for
실행되는 루프 grep
, rg
과 grep -F
15GB 텍스트 파일에 두 번째 테스트는 데이터 전체에서 실행되는 일련의 동일한 명령이됩니다. 내 자신의 제한된 기간 사이에 일정한 사이클링을 한 후 bash
지식, 해결책 및 문제 해결 오류를 찾는 경우, 나는 첫 번째 테스트 (두 번째 테스트에서 다시 용도 변경)를 위해 다음을 함께 해킹했습니다.
for i in {1..15}; \
do (time LC_ALL=C grep -i "ajndoandajskaskaksnaodnasnakdnaosnaond" "15gbfile.txt") 2>&1 |
tee -a "../grep Test 1.txt"; \
done; \
for i in {1..15}; \
do (time rg -i "ajndoandajskaskaksnaodnasnakdnaosnaond" "15gbfile.txt") 2>&1 |
tee -a "../ripgrep Test 1.txt"; \
done;
for i in {1..15}; \
do (time LC_ALL=C grep -Fi "ajndoandajskaskaksnaodnasnakdnaosnaond" "15gbfile.txt") 2>&1 |
tee -a "../grep -F Test 1.txt"; \
done;
못 생겼지 만 정확히 의도 한대로 작동합니다. 세 가지 모두를 실행합니다. for
한 번에 하나씩 반복합니다. 각 문자열은 절대로 발견되지 않을 긴 문자열에 대해 15 번 grepping하고, 그 다음 출력을 인쇄합니다. time
각각 grep
두 사람에게 STDOUT
및 파일.
그러나 벤치마킹을하고 있기 때문에이 코드가 POSIX / bash / Cygwin 시스템에서 사용 사례의 (상대적인) 속도를 정확하게 테스트하는 데 적합하며, 내가 훑어 보는 것이 아무것도 없다는 것을 확인하고 싶습니다. 내가 얻은 결과. 특히, 캐싱, 디스크 IO 및 기타 고려 사항과 같은 것들. 나는 더 견고하게 행동하도록 만드는 어떤 제안도 환영 할 것이다.
grep
캐싱은 첫 번째 또는 두 번 실행시에만 시간차가 생길 것이라는 믿음으로 각 15 번. 그렇지 않은가요?
grep -r
하지 않을 것이다. 이 할 수 있었다 단일 파일을 검색하여 검색 시간을 단축 할 수 있습니다.
ripgrep
,하지만 당신의 요점을 참조하십시오. 게시물에서 언급했듯이, 이것은 단순히 내가 실행하고자하는 첫 번째 테스트입니다. 두 번째 테스트는 전체 디렉토리에서 명령을 실행하는 것입니다. 제 의도의 대부분은 단순히 코드 자체에 아무런 이상이 없었는지 확인하여 두 번째 테스트를 위해 용도 변경 될 수 있도록하는 것입니다.