awk, mawk, nawk, gawk ... APA?

38

Saya baru saja mulai belajar awk dan saya agak bingung tentang semua versi di sekitar. Apakah ada "versi" yang ditemukan di semua sistem mirip Unix? Seperti, Anda tahu, polos vi? Apakah awk standar mendukung opsi -F?

Der Hochstapler
sumber

Jawaban:

37

awk - yang paling umum dan akan ditemukan di sebagian besar sistem mirip Unix, versi tertua dan lebih rendah daripada yang lebih baru.

mawk - implementasi AWK cepat yang basis kodenya didasarkan pada penerjemah byte-code.

nawk - sementara bahasa AWK sedang dikembangkan penulis merilis versi baru (karenanya n - n awk awk) untuk menghindari kebingungan. Anggap saja seperti Python 3.0 dari AWK.

gawk - disingkat dari GNU awk. Satu-satunya versi di mana para pengembang berusaha untuk menambahkan dukungan i18n. Mengizinkan pengguna menulis pustaka bersama C mereka sendiri untuk memperluasnya dengan "plug-in" mereka sendiri. Versi ini adalah implementasi standar untuk Linux, AWK asli ditulis untuk Unix v7.

Ada versi lain seperti jawk (implementasi java), bwk (implementasi Brian W. Kernighan) dan sebagainya.

John T
sumber
3
Awk asli tidak ada pada sistem seperti Unix yang saya miliki. Seringkali, /usr/bin/awkakan menjalankan nawk, atau gawk, atau BusyBox awk (mirip perilaku dengan gawk).
dubiousjim
10
Pada akhir 2012, sistem Ubuntu / Debian menginstal mawk secara default. Baris perintah file /etc/alternatives/awkkembalisymbolic link to /usr/bin/mawk
Mike Sherrill 'Cat Recall'
apakah MAWK memiliki semua fungsi GAWK seperti array multi dimensi yang benar?
WYSIWYG
2
@JordonBedwell Yap .. Ada: pengulangan regex tidak mungkin di mawk. Itu juga tidak mendukung array multidimensi.
WYSIWYG
1
@dubiousjim Ubuntu memiliki original-awk di repositori universe.
jarno
6

Anda bisa menggunakannya awk. Ini didefinisikan oleh POSIX dan karena itu harus ada pada semua sistem POSIX-conformant.

The -Fparameter diamanatkan oleh yang juga.

Joey
sumber
1
... tapi hati-hati untuk memeriksa dengan standar untuk mengetahui apa yang dapat Anda gunakan untuk memastikan kompatibilitas dengan versi lain. Jangan, misalnya, digunakan gensub(), uji dengan awk-> gawk, dan berpikir Anda baik sedang pergi ...
dmckee
1
@ dmckee, Anda dapat menggunakannya gawk --posixuntuk membuat gawk bekerja sesuai dengan standar POSIX. Itu juga memeriksa skrip Anda mengikuti standar. Anda dapat menggunakan awk --posix '' 2>/dev/nulldi Ubuntu tidak masalah, jika gawk, mawk atau original-awk digunakan sebagai awk, tetapi opsi-posix hanya dikenali oleh gawk. --posix harus menjadi pilihan terakhir untuk original-awk. Anda bisa menggunakannya awk -W posix ''dengan gawk dan mawk.
jarno
1
@ dmckee, oh mawk --posix ''gagal, jika Anda menggunakan mawk 1.3.3, tetapi berhasil dengan pesan kesalahan, jika Anda menggunakan mawk 1.3.4
jarno
1

awkakan ada di hampir semua sistem berbasis * NIX, tetapi spesifik spesifik dari apa yang didukungnya akan sedikit bergeser karena sangat mungkin itu hanya akan disinkronkan ke versi yang berbeda seperti bagaimana /bin/shsering dikaitkan dengan shell tertentu, sering bashatau salah satu dari turunannya. (Sebagai catatan, saya juga tahu banyak mesin di mana visymlinked vimjuga.)

Matthew Scharley
sumber
Tidak selalu harus disinkronkan; kadang-kadang sulit dihubungkan.
dubiousjim
0

The halaman Wikipedia AWK adalah referensi starter yang baik untuk mulai memahami AWK.
The Lapangan Separator pilihan ' -F' didukung di semua varian dari AWK - afaik.

nik
sumber