ko en ko ko ko ja en en zh en pt ko ko ko ko en ko ko en ko ko nl ko ko ko ko ko ko ko en ko ko nl ko nl ko ko ko ko ko ko nl ko en ko nl ko ko ko ko ko zh en en en en pt fr en en kn en sv fr en en en en en es fr en en en fr ja en en en en en en en en en fi en hu pt hbs_lat ru en en en en pl ko ko ko ko ko ko ko zh en en pt en en en uz en en fr eo sv en en en es en en en en en en ja en it hu ja eo en de en ko ko en en
길거나 짧은 검색어로 Unix grep이 더 빨리 작동합니까? 5000 행이 - How IT
길거나 짧은 검색어를 찾는 것이 더 빠릅니까? 아니면 속도에 전혀 영향을 줍니까? 다시 말해, 검색어를 최대한 정확하게 작성해야합니까?
100,000 개가 넘는 파일이 있으며 각 파일에는 20 행에서 5000 행이 넘는 데이터 행이 있습니다. 일반적으로 grep은 하나의 검색어 인스턴스 만 찾는 데 사용됩니다.
검색어가 SEARCHTERM이고 다음과 같은 행에 있다고 가정 해 보겠습니다 .
“SEARCH”또는 “SEARCHTERM”을 찾는 것이 더 빠릅니까? 이 경우 다른 관련없는 라인에서 일치하는 항목을 찾더라도 신경 쓰지 않는다고 가정 해 봅시다.
grep NAD+DP 123* | grep SEARCHTERM
그러나 여전히 느립니다. 거친 파일 이름을 아는 경우에도 데이터를 찾는 데 약 3-5 분이 걸리며 범위는 약 10 000 파일로 제한됩니다.
그렇다면 더 길거나 짧은 검색어가 도움이 되겠습니까? 내가 아는 한 grep은 특정 길이의 단어의 “블록”을 찾습니다.
GNU grep은 잘 알려진 Boyer-Moore 알고리즘을 사용합니다.이 알고리즘은 대상 문자열의 마지막 문자를 먼저 찾고 조회 테이블을 사용하여 일치하지 않는 문자를 찾을 때마다 입력에서 건너 뛸 수있는 정도를 알려줍니다.
에서 왜 GNU 그렙은 빠르고 .
알고리즘은 검색중인 문자열 (패턴)을 전처리하지만 검색중인 문자열 (텍스트)은 처리하지 않습니다. […] 일반적으로 패턴 길이가 길수록 알고리즘이 더 빠르게 실행됩니다.
에서 보이어 – 무어 문자열 검색 알고리즘 .
결론 : 더 긴 문자열을 사용하십시오 .
이제 재미를위한 약간의 벤치 마크 :
결과 : 짧은 문자열의 평균은 0.952 초이고 긴 문자열의 평균은 0.244 초입니다.
NB : 길이 만 고려할 기준은 아닙니다.
SEARCH 또는 SEARCHTERM을 사용하여 시도해 볼 수 있습니다. 또한 두 grep 명령의 순서를 변경하십시오. 어쨌든 유일한 유용한 옵션은 하나의 검색에 여러 CPU 코어를 사용하는 것입니다. parallel명령을 참조하십시오 .
더 구체적인 검색어를 지정하면 눈에 띄게 더 빠를 것이라고 생각하지 않습니다.
검색 할 파일이 너무 많으면 검색 속도를 높이기 위해 데이터를 색인화해야합니다.
몇 가지 방법을 제안 할 수 있습니다.
데이터베이스 (PostgreSQL 또는 MySQL)를 생성하고 데이터를 데이터베이스로 가져옵니다 (한 행에 한 파일 씩). FTS (전체 텍스트 검색) 인덱스를 추가하십시오. 데이터베이스를 쿼리하는 유틸리티를 작성하십시오.
보다 세밀한 방식으로 데이터베이스에 데이터를 가져 오십시오. 한 행에 하나의 행 (또는 여러 테이블에)이있을 경우 인덱스를 사용하여 데이터를 검색 할 수 있도록 인덱스를 작성하십시오. 데이터베이스를 쿼리하는 유틸리티를 작성하십시오.
파일을 git리포지토리에 추가 하고을 사용하여 압축 한 다음 검색에 git gc사용하십시오 git grep. 내 경험상 10x-100x의 요소로 git grep표준보다 빠를 수 있습니다 grep.
논리적으로, 짧은 용어로, 적은 CPU 시간을 필요로 grep하고있을 것
if (filechar[i] == pattern[i]) ...
적은 시간. 실제로, 나는 grepCPU 바인딩이 아닌 I / O 바인딩 이라고 생각 하므로 중요하지 않습니다.
이 글은 Superuser 카테고리에 분류되었고 grep, performance, speed, unix 태그가 있으며 소장 마님에 의해 2022-06-28에 작성되었습니다.
← 명령 줄에서 절전 모드를 시작하면 예약 된 작업이 실행되지 않습니다 작업으로 인해 PC가 절전 모드에서 예측에 임의 효과를 포함시키지 않고 혼합 효과 모델에서 예측하는 이유는 무엇입니까? 체중을 예측하고 싶다면 다음과 같이 할 수 →
CLI를 통해 WPA2- 엔터프라이즈 연결에 연결 (데스크탑 없음) 연결에 연결하는 데 필요한 설명을
dnsmasq 순환 루프 오류 어딘가에 구성이없는 것을
“연결 프로그램”목록을 제거 / 변경하려면 어떻게합니까? 하나를 제거하고
저는 관리자입니다. 업무 관계 및 프로그래머와의 의사 소통을 어떻게 개선 할 수 있습니까? [닫은] 5 년 동안 여러
오디오 입력은 항상 웹캠 마이크가 될 수 있습니까? 이동해야합니다. 거기에서 오디오 입력을 ” 웹캠
Proudly powered by WordPress