grep
가 내부적으로 어떻게 작동하는지 알고 싶습니다. 특히 첫 경기를 찾는 것이 모든 경기를 찾는 것보다 훨씬 더 빠르다는 것을 알고 싶습니다. 예를 들어 첫 번째 일치 항목은 파일 시작 부분의 10 % 지점에서 발생하며 모든 일치 항목이 파일 전체에 퍼집니다. 그럼 첫 번째 일치를 찾는 것만으로도 grep
은 모든 일치를 찾는 것보다 훨씬 적은 파일 내용을 처리합니다 (이 경우 grep
은 이전 파일의 10 %와 비교하여 전체 파일을 통과해야 함). 내 가정이 올바른지 알고 싶습니다. 가능한 개선이 내 처리 작업을 크게 향상시킬 수 있기 때문입니다. 감사합니다. .Grep 내부 작동 원리
답변
파일에서 일치하는 모든 줄을 인쇄하려면 grep
을 사용하는 경우 물론 전체 파일을 처리해야합니다.
grep -q
을 사용하여 하나 이상의 일치 항목이 발견되면 성공적인 종료 상태를 생성하는 경우 물론 grep
은 첫 번째 일치시 중지 될 수 있습니다. 첫 번째 일치 항목이 파일의 초기에 발견되면 grep
이 즉시 해당 지점에서 나가고 성공적인 종료 상태를 반환 할 수 있으므로 시간이 절약됩니다. 파일에 일치하는 항목이 없으면 (최악의 경우) 전체 파일을 처리해야합니다. 이 경우 전체 파일을 처리해야합니다. 일치하지 않는 이유는 무엇일까요? 가장 마지막 행에서만 일치가 발생하지만 grep이 해당 행을 무시하면 일치하는 항목이 잘못보고됩니다.
Grep은 패턴을 정규식으로 컴파일합니다. 정규 표현식의 구조와 관련하여 성능에 영향을 줄 수 있습니다. 일부 정규식은 다른 정규식보다 성능이 우수합니다. 사용 된 알고리즘에 따라 작게 나타나는 일부 정규 표현식은 많은 수의 상태가있는 상태 시스템을 생성 할 수 있습니다.
검색 속도를 높이기위한 기술은 색인 생성입니다. 텍스트 모음에서 특정 단어를 자주 찾는 경우 단어를 색인에 포함하면 해당 단어가 코퍼스에서 발견되는 위치를 나타내는 것이 더 빠릅니다. 색인은 단어가있는 위치 목록이 텍스트를 스캔하지 않고 매우 빠르게 검색되도록 구성됩니다. 색인을 작성하는 데 시간이 걸리며 (텍스트 본문 전체를 스캔해야 함) 코퍼스가 변경되면 색인을 다시 작성해야합니다.
이것은 GNU Id-Utils와 같은 컴퓨터 프로그램 소스 코드에서 식별자 검색 속도를 높이는 도구의 기초입니다. 물론 색인 생성은 Google과 같은 월드 와이드 웹 검색 엔진의 기초입니다.
grep 소스 코드 (버전 2.18)를 간략하게 살펴보면 /src/main.c
에 done_on_match
이라는 변수가 있습니다.이 변수는 설정 한 경우 첫 번째 일치 후 검색을 중지해야합니다. 이 변수는 -l
, -L
또는 -q
(및 기타 변수)에 설정됩니다. 그래서 예, 첫 경기를 검색하면 grep
이 먼저 있어야합니다.
내가 말했듯이 이렇게하면 처리 속도가 빨라지는 것이 확실하지 않다. 대기 시간이 파일 I/O 일 가능성이 높다.
- 1. Python-daemon 작동 원리
- 2. 어셈블리 언어 - 작동 원리
- 3. Cloud Foundry, 작동 원리?
- 4. sendAction 작동 원리 ...?
- 5. 어노테이션 작동 원리
- 6. OpenCV SurfFeatureDetector 작동 원리
- 7. Neo4j와 lucene의 작동 원리
- 8. 리프트 : testCond - 작동 원리?
- 9. AS3 Decompiler. 작동 원리
- 10. application.ini - 작동 원리
- 11. AirDroid - 작동 원리
- 12. Changewheel 기능 작동 원리?
- 13. Laravel elixir : 작동 원리
- 14. Android GCM의 작동 원리
- 15. Geolocation - 작동 원리
- 16. 레일 위임 - 작동 원리
- 17. 블록이있는 NSPredicate - 작동 원리
- 18. LC-3 .BLKW 작동 원리
- 19. 내비게이션 컨트롤러 작동 원리 - IOS?
- 20. pom 파일의 종속성 - 작동 원리
- 21. 이메일 추적 도구, 작동 원리
- 22. 글래스 피시로드 밸런서 작동 원리
- 23. SlimDX, 윈도우의 작동 원리 이해
- 24. form_for in devise 작동 원리
- 25. 카산드라 복제 시스템 - 작동 원리
- 26. Hdfs 및 Hbase : 작동 원리?
- 27. ndgrid matlab 함수의 작동 원리
- 28. 번역 애니메이션 작동 원리 : Android
- 29. RoR을 사용한 Google 검색, 작동 원리
- 30. 파이썬에서의 스레드 안전성 (작동 원리 질문)
@FlorinStingaciu @FlorinStingaciu 나는 핵심 알고리즘에 대한 지식이 충분하지 않아 이해할 수 없으며'grep'에 대해 모든 것을 이해하는 데 3 개월을 쓸 가치가 없습니다. 내 프로젝트는 이미 그때까지 끝났어. 어떻게 작동하는지 알면 나 한테 줄까요? – zyl1024
어떻게 작동하는지 모르겠습니다. 하지만 간단한 테스트를 만들어 보시지 않으시겠습니까? 여러 개의 검색이 일치하는 대용량 파일 (> 1GB)이 있어야합니다. grep이 첫 번째 일치 항목을 반환하고 시간을 지정합니다. grep이 모든 일치 항목과 시간을 찾을 수있게합니다. 그것은 당신에게 당신이 찾고있는 대답을 줄 것입니다. –