답변:
grep이 더 빠를 것입니다.
# time awk '/USAGE/' imapd.log.1 | wc -l
73832
real 0m2.756s
user 0m2.740s
sys 0m0.020s
# time grep 'USAGE' imapd.log.1 | wc -l
73832
real 0m0.110s
user 0m0.100s
sys 0m0.030s
awk는 해석 된 프로그래밍 언어이며, grep은 컴파일 된 c 코드 프로그램 (파일에서 패턴을 찾는 데 추가로 최적화 됨)입니다.
(참고-캐싱으로 인해 결과가 왜곡되지 않도록 두 명령을 두 번 실행했습니다.)
위키 백과의 해석 언어 에 대한 자세한 내용
Stephane이 코멘트에서 올바르게 지적했듯이, 사용하는 grep 및 awk, 운영 체제 및 운영중인 문자 집합의 구현에 따라 마일리지가 다를 수 있습니다.
가장 구체적이고 표현력있는 도구를 사용하십시오. 사용 사례에 가장 적합한 도구가 가장 빠를 수 있습니다.
대략적인 지침으로 :
perl
대신에 +1을 사용하십시오 awk
. grep / cut / sed보다 더 복잡한 것이 필요하다면, 기회가 충분하지 않고 "완전한"무언가가 필요합니다
문자열 만 검색하고 속도가 중요한 경우 거의 항상을 사용해야 grep
합니다. awk
단순히 전체 검색 보다 훨씬 빠릅니다 .
소스 나오지도, AWK와 다른 유닉스 분석 유틸리티의 기능 및 성능 차이를
UTILITY OPERATION TYPE EXECUTION TIME CHARACTERS PROCESSED PER SECOND
(10 ITERATIONS)
------- -------------- --------------- -------------------------------
grep search only 41 sec. 489.3 million
sed search & replace 4 min. 4 sec. 82.1 million
awk search & replace 4 min. 46 sec. 69.8 million
Python search & replace 4 min. 50 sec. 69.0 million
PHP search & replace 15 min. 44 sec. 21.2 million
awk ... has PCRE matching for regular expressions
완전히 사실이 아닙니다.
이론 상으로는 실제로 YMMV grep
보다 빠르다는 데 동의하지만 awk
사용하는 구현에 많이 의존합니다.
여기에서는 2.5M 라인의 240MB 파일에 UTF-8 로켈의 데비안 / 리눅스 7.0 amd64 (glibc 2.17 포함)에서 busybox 1.20.0의 grep 및 awk, GNU grep 2.14, mawk 1.3.3, GNU awk 4.0.1 비교 ASCII 전용 문자
$ time busybox grep error error | wc -l
331003
busybox grep error error 8.31s user 0.12s system 99% cpu 8.450 total
wc -l 0.07s user 0.11s system 2% cpu 8.448 total
$ time busybox awk /error/ error | wc -l
331003
busybox awk /error/ error 2.39s user 0.84s system 98% cpu 3.265 total
wc -l 0.12s user 1.23s system 41% cpu 3.264 total
$ time grep error error | wc -l
331003
grep error error 0.80s user 0.10s system 99% cpu 0.914 total
wc -l 0.00s user 0.11s system 12% cpu 0.913 total
$ time mawk /error/ error | wc -l
330803
mawk /error/ error 0.54s user 0.13s system 91% cpu 0.732 total
wc -l 0.03s user 0.08s system 14% cpu 0.731 total
$ time gawk /error/ error | wc -l
331003
gawk /error/ error 1.37s user 0.12s system 99% cpu 1.494 total
wc -l 0.04s user 0.07s system 7% cpu 1.492 total
$ time
C 로켈에서는 GNU grep 만 크게 향상되고보다 빠릅니다 mawk
.
정규 표현식의 유형 인 데이터 세트도 큰 차이를 만들 수 있습니다. regexps '에 들어 awk
비교해야 grep -E
으로 awk
의 regexps'에이 확장 된 RE 있습니다.
이 데이터 세트의 경우, 기본이 되고 기본 로케일이 UTF-8 기반 (IIRC, 우분투의 경우) 인 busybox 기반 시스템 또는 시스템 awk
보다 빠를 수 있습니다 .grep
mawk
awk
간단히 말해서, grep
다른 많은 UNIX 도구와 마찬가지로 한 가지 작업 만 수행하면 주어진 패턴과 일치하는 행을 찾습니다. 반면 awk
에 POSIX 표준에 의해 정의 된 완전한 프로그래밍 언어이기 때문에 패턴 스캐닝 및 처리를위한 변수, 배열, 표현식, 함수 또는 제어문과 같은 일반적인 기능을 갖춘보다 복잡한 도구입니다.
내 생각에 그것은 패턴 일치의 경우 두 도구가 어떻게 수행되는지와 처리하려는 일부 입력의 크기에 따라 구현에 달려 있습니다. grep은 보통 awk보다 더 효율적일 것으로 기대합니다. 그러나 다른 도구를 사용하지 않고 일치하는 레코드의 추가 처리, 계산 또는 결과 인쇄와 같은보다 복잡한 작업을 수행하는 간단한 코드를 grep으로 작성할 수 없습니다.
time
을 실행하는 데 걸리는 시간을 정하는 명령을 사용하여 명령 ( 셸 스크립트까지 포함)을 선행하십시오 . 예 :time ls -l
.