나는 그것을 더 자주 사용하며 대문자나 소문자의 모든 문자를 일치시키는 것보다 속도가 느리다 grep -i
는 것을 알았습니다 .egrep
$ time grep -iq "thats" testfile
real 0m0.041s
user 0m0.038s
sys 0m0.003s
$ time egrep -q "[tT][hH][aA][tT][sS]" testfile
real 0m0.010s
user 0m0.003s
sys 0m0.006s
grep -i
수행되지 않은 추가 테스트가 수행 되었습니까 egrep
?
답변1
grep -i 'a'
grep '[Aa]'
순수 ASCII 언어 환경 과 동일합니다 . 유니코드 로케일에서는 문자 동등성 및 변환이 복잡할 수 있으므로 grep
동등한 문자를 확인하려면 추가 작업이 필요할 수 있습니다. 관련 로케일은 LC_CTYPE
바이트가 문자로 해석되는 방식을 결정한다는 것입니다.
내 경험상 grep
UTF-8 로케일에서 GNU를 호출하면 속도가 느려질 수 있습니다. ASCII 문자만 검색한다는 것을 알고 있다면 ASCII 전용 로케일에서 호출하는 것이 더 빠를 수도 있습니다. 기대했다
time LC_ALL=C grep -iq "thats" testfile
time LC_ALL=C egrep -q "[tT][hH][aA][tT][sS]" testfile
구별할 수 없는 시간을 만들어 낼 것이다.
즉, grep
Debian jessie에서 GNU를 사용하여 결과를 재현할 수 없었습니다(그러나 테스트 파일을 지정하지 않았습니다). ASCII 로캘( LC_ALL=C
) 을 설정하면 grep -i
더 빠릅니다 . 영향은 문자열의 정확한 특성에 따라 달라집니다. 예를 들어 반복되는 문자가 포함된 문자열은 성능을 저하시킵니다(이는 예상할 수 있는 일이다).
답변2
호기심에 나는 이것을 Arch Linux 시스템에서 테스트했습니다.
$ uname -r
4.4.5-1-ARCH
$ df -h .
Filesystem Size Used Avail Use% Mounted on
tmpfs 3.9G 720K 3.9G 1% /tmp
$ dd if=/dev/urandom bs=1M count=1K | base64 > foo
$ df -h .
Filesystem Size Used Avail Use% Mounted on
tmpfs 3.9G 1.4G 2.6G 35% /tmp
$ for i in {1..100}; do /usr/bin/time -f '%e' -ao grep.log grep -iq foobar foo; done
$ for i in {1..100}; do /usr/bin/time -f '%e' -ao egrep.log egrep -q '[fF][oO][oO][bB][aA][rR]' foo; done
$ grep --version
grep (GNU grep) 2.23
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.
그리고 몇 가지 통계단일 명령으로 숫자 목록의 최소값, 최대값, 중앙값 및 평균을 얻는 방법이 있습니까?:
$ R -q -e "x <- read.csv('grep.log', header = F); summary(x); sd(x[ , 1])"
> x <- read.csv('grep.log', header = F); summary(x); sd(x[ , 1])
V1
Min. :1.330
1st Qu.:1.347
Median :1.360
Mean :1.362
3rd Qu.:1.370
Max. :1.440
[1] 0.02322725
>
>
$ R -q -e "x <- read.csv('egrep.log', header = F); summary(x); sd(x[ , 1])"
> x <- read.csv('egrep.log', header = F); summary(x); sd(x[ , 1])
V1
Min. :1.330
1st Qu.:1.340
Median :1.360
Mean :1.365
3rd Qu.:1.380
Max. :1.430
[1] 0.02320288
>
>
저도 거기 있었는데 en_GB.utf8
시간이 거의 분간이 안 될 정도였어요.