grep kemungkinan besar akan lebih cepat:
# 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 adalah bahasa pemrograman yang ditafsirkan, sedangkan grep adalah program kode-c yang dikompilasi (yang juga dioptimalkan untuk menemukan pola dalam file).
(Catatan - Saya menjalankan kedua perintah dua kali sehingga caching tidak berpotensi memiringkan hasil)
Detail selengkapnya tentang bahasa yang ditafsirkan di wikipedia.
Seperti yang ditunjukkan dengan benar oleh Stephane dalam komentar, jarak tempuh Anda mungkin berbeda karena penerapan grep dan awk yang Anda gunakan, sistem operasi yang digunakan, dan kumpulan karakter yang sedang Anda proses.
Gunakan alat yang paling spesifik dan ekspresif. Alat yang paling sesuai dengan kasus penggunaan Anda kemungkinan adalah yang tercepat.
Sebagai panduan kasar:
- mencari baris yang cocok dengan substring atau regexp? Gunakan grep.
- memilih kolom tertentu dari file yang dibatasi sederhana? Gunakan cut.
- melakukan substitusi berbasis pola atau ... hal lain yang dapat dilakukan sed secara wajar? Gunakan sed.
- perlu beberapa kombinasi dari 3 di atas, atau format printf, atau loop dan cabang tujuan umum? Gunakan awk.
Saat hanya mencari string, dan masalah kecepatan, Anda harus selalu menggunakan grep
. Ini urutan besarnya lebih cepat dari awk
ketika datang ke pencarian kotor saja.
sumber Perbedaan fungsional dan kinerja sed, awk dan utilitas parsing Unix lainnya
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