GNU/Linux >> Belajar Linux >  >> Linux

Menggunakan grep vs awk

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

Linux
  1. Pencocokan Pola Multiline Menggunakan Sed, Awk Atau Grep?

  2. Menemukan Item Terakhir Dalam Baris Menggunakan Grep?

  3. Menggunakan grep untuk mencari secara terbalik

  1. Bagaimana cara menggabungkan dua file menggunakan AWK?

  2. Menemukan file yang dapat dieksekusi menggunakan ls dan grep

  3. Hapus karakter tertentu menggunakan awk atau sed

  1. menggunakan awk dengan kondisi nilai kolom

  2. grep untuk mencari data di kolom pertama

  3. Penjelasan tentang perintah awk menggunakan ORS, NR, FS, RS