Mặc dù tôi đồng ý rằng trên lý thuyết grep
nên nhanh hơn awk
, trong thực tế, YMMV vì điều đó phụ thuộc rất nhiều vào việc triển khai bạn sử dụng.
ở đây so sánh grep và awk của busybox 1.20.0, GNU grep 2.14, mawk 1.3.3, GNU awk 4.0.1 trên Debian / Linux 7.0 amd64 (với glibc 2.17) trong ngôn ngữ UTF-8 trên tệp 240 MB của 2,5M dòng Ký tự chỉ 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
Trong miền địa phương C, chỉ GNU grep có được sự gia tăng đáng kể và trở nên nhanh hơn mawk
.
Các tập dữ liệu, loại regrec cũng có thể tạo ra một sự khác biệt lớn. Đối với biểu thức chính, awk
nên được so sánh với biểu thức chính grep -E
là awk
biểu thức mở rộng.
Đối với tập dữ liệu này, awk
có thể nhanh hơn grep
trên các hệ thống hoặc hệ thống dựa trên busybox mawk
mặc định awk
và ngôn ngữ mặc định là dựa trên UTF-8 (IIRC, nó từng là trường hợp trong Ubuntu).
time
lệnh để tính thời gian cần thiết để chạy lệnh. Vd :time ls -l
.