병렬로 awk 사용

병렬로 awk 사용

각각 300MB 크기의 파일이 약 3,000개 있는데, 16개 코어 서버에서 가능한 한 빨리 일련의 하위 문자열을 검색하고 싶습니다.

이것이 내가 시도한 것이지만 파일 검색을 병렬화하지 못하는 것 같습니다.

sudo find /mnt2/preprocessed/preprocessed/mo* | sudo xargs awk '/substring/ {c++} END {print c}' | paste -sd+ | bc

여러 가지 방법으로 붙여넣은 것인데, 완전히 이해가 되지 않습니다. 파일 처리를 분할하는 방법에 대한 제안 사항이 있습니까?

답변1

  1. parallel시스템에 프로그램이 있는지 확인하십시오 . (GNU에서 올 수도 있습니다.) 그렇다면 어떻게 사용하는지 알아보세요. 그렇지 않으면,
  2. find파일로 출력하여 실행하십시오 . 텍스트 편집기나 와 같은 도구를 사용하는 스크립트를 사용하여 head해당 파일을 (대략) 동일한 수의 행(즉, 동일한 수의 발견된 파일 참조)이 있는 16개의 조각 파일로 분할합니다. 그런 다음 16개의 awk … | paste … | bc파이프라인을 시작합니다. 각 조각 파일마다 하나씩. (그리고 16개의 결과를 추가합니다.)

특별히 설계된 awk문자열의 발생 횟수를 계산하는 데 사용하는 이유가 궁금합니다 .grep -c

답변2

GNU 병렬은 xargs와 꽤 호환되므로 귀하의 경우 이를 대체할 수 있습니다. substring사용 횟수만 계산하는 grep -c경우스캇제안:

sudo find /mnt2/preprocessed/preprocessed/mo* | 
  sudo parallel grep -c source | paste -sd+ | bc

일부 GNU/Linux 버전은 "Tollef 병렬" 호환 모드에서 GNU 병렬을 설치합니다. --gnu명령줄 인수를 병렬로 추가하여 이를 변경할 수 있습니다 . 변경 사항을 영구적으로 적용하려면 --gnu에 추가하세요 ~/.parallel/config.

관련 정보