2017-09-26 16 views
0

나는 내가 10G 로그 파일을 실행해야 grepGNU 병렬을 사용하여 일련의 greps을 실행 하시겠습니까?

grep -E '[0-9]{3}\.[0-9]+ ms' file.log | grep -v "Cycle Based" | grep -Ev "[0-9]{14}\.[0-9]+ ms" > pruned.log 

의 다음 문자열이 있습니다. 그것은 내가 GNU parallel을 사용하려고하기 때문에 기다릴 용의가 조금 더 오래 걸리지 만, grep의이 체인을 parallel으로 어떻게 실행할 수 있는지는 분명하지 않습니다.

이 가장 빠른 단일 grep을 실행하는 방법의 문제가 아니라,이 파일을 grepping하는 디스크 인 경우 병렬

+0

[가장 빠른 그렙] (의 가능한 중복 https://stackoverflow.com/questions/9066609/fastest-possible-grep) –

+0

@MichaelFoukarakis, 중복이 아님. 나는 이미 그 질문을 읽었으며 내가 찾던 것이 아니다. –

+1

모든'grep' cmds를 쉘 스크립트에 넣고'myBigGrep.sh file.log'와 같이 호출하고 파이프 앞의 파일 이름을'$ {@}'로 대체 할 수 있습니다 .'parallel'는 처리 할 여러 파일 큰 파일을'file001.log, file002.log ...'로'나눌 '시간을 할 의향이 있습니까? 갚을 지 모르지만 테스트 할 시간이 필요할 것입니다. log-rotate를 설치하는 데 더 많은 시간을 할애하여 매일 (매시간) 로그 파일을 만들 수 있습니다. 행운을 빕니다. – shellter

답변

2

일반적으로 제한 요소에 시리즈를grep의의를 실행하는 방법에 대한 것입니다. 하나의 디스크를 가지고 있다면, 이것이 당신을 제한 할 가능성이 있습니다.

그러나 RAID10// 60 (50) 또는 분산 네트워크 파일 시스템을 가지고 있다면, 당신의 처리 속도가 빨라질 수 있습니다 병렬화 :

doit() { 
    grep -E '[0-9]{3}\.[0-9]+ ms' | grep -v "Cycle Based" | grep -Ev "[0-9]{14}\.[0-9]+ ms" 
} 
export -f doit 
parallel --pipepart -a file.log --block -1 -k doit > pruned.log