Ini adalah pertanyaan tindak lanjut untuk dua berikut:
- Kesalahan sintaksis menghapus baris duplikat melalui file awk '! X [$ 0] ++'
- awk / nawk alternatif di SunOs dan Linux
Saya melihat bahwa pada Solaris 10 (SunOS 5.10), saya mendapatkan hasil berikut:
$ type -a awk
awk is /usr/bin/awk
$ PATH="$(getconf PATH)" type -a awk
awk is /usr/xpg4/bin/awk
awk is /usr/bin/awk
$
Pada Solaris 10, /usr/bin/awk
tidak menerima sintaks Awk standar POSIX seperti '!x[$0]++'
, tetapi /usr/xpg4/bin/awk
tidak. Cukup bagus sejauh ini.
Namun, pada Solaris 11, hanya ada /usr/bin/awk
bahkan dengan getconf PATH
. Meskipun ada nawk
dan oawk
ada /usr/bin
, ini jelas tidak ditunjukkan oleh symlink dari mana saja.
Mengetahui bahwa Solaris bersertifikat POSIX, ini mengejutkan saya.
Bagaimana saya bisa mendapatkan Awk yang memenuhi syarat POSIX secara standar pada Solaris 11 menggunakan kode portabel yang juga akan bekerja pada sistem yang sesuai dengan POSIX lainnya? (Atau apakah satu-satunya pilihan untuk memeriksa keberadaan nawk
atau oawk
dan menggunakan salah satunya jika ada?)
Untuk itu, apa yang nawk
dan oawk
?
/usr/xpg4/bin/awk
tidak ada dalam Solaris 11?nawk
adalah "baruawk
", AT&T yang ditingkatkanawk
.Jawaban:
Pada instalasi Solaris 11 penuh atau desktop, ada tiga
awk
implementasi yang tersedia, ditambah beberapa varian:Mereka semua "memenuhi standar", meskipun mematuhi standar yang berbeda.
/usr/bin/awk
mematuhiawk
implementasi UNIX lama yang dirilis pada tahun 1977. Itu disimpan pertama kali dalam sistem PATH default untuk tidak melanggar skrip yang ada sebagaiawk
rilis berikutnya istirahat kompatibilitas.oawk
adalah sinonim dariawk
/usr/bin/nawk
adalah versi "baru" dariawk
, pertama kali dikirim dalam SVR3.1 pada tahun 1986.Awk
Standar POSIX didasarkan pada implementasi ini./usr/xpg4/bin/awk
hampir identik dengan yang pertama, tetapi yang secara formal diperiksa terhadap tes validasi kesesuaian POSIX./usr/gnu/bin/awk
, juga/usr/bin/gawk
merupakan varian GNU dariawk
. Ini bertujuan untuk mematuhi sebagian besar atau semua standar POSIX ketika variabel lingkunganPOSIXLY_CORRECT
diatur di lingkungan atau ketika dipanggil dengan-W posix
opsi tetapi sebaliknya menambahkan banyak ekstensi sendiri.igawk
danpgawk
itu sendiri ekstensi untukgawk
, yang pertama mendukung termasuk file dan yang kedua mendukung profil.Lihat juga bab sejarah GNU
awk
untuk banyak informasi berguna.Hanya
core-os
paket-paket yang dijamin hadir pada instalasi reguler Solaris 11, dengan demikian hanyaoawk/awk
dannawk
ada di sana. Secara khusus, ketika Anda membuat zona non global , itu berisi secara defaultsolaris-small-server
paket grup sehingga binerxpg4
maupungnu
awk
biner tidak tersedia. Ini dengan desain. Thesolaris-small-server
group adalah titik awal minimal yang Anda tambahkan paket yang dibutuhkan untuk aplikasi Anda untuk benar bekerja. Ini lebih aman dan efisien daripada cara sebelumnya (Solaris 10) di mana segala sesuatu yang terinstal di zona global juga diinstal pada yang non global sehingga Anda harus menghapus paket yang tidak digunakan ketika Anda ingin meminimalkan zona tersebut.Untuk mendapatkan
awk
dukungan POSIX dengan cara portabel dalam instalasi "server kecil", Anda perlu menginstalxcu4
paket dan mengatur PATH Anda ke yang sesuai dengan POSIX:Haruskah untuk beberapa alasan Anda tidak ingin menginstal paket itu, solusi adalah dengan menggunakan "kebiasaan"
PATH
yang mengandungnawk
sebagaiawk
, misalnya:Atau, Anda dapat menginstal
GNU awk
dan mengatur AndaPATH
untuk mendapatkannya terlebih dahulu:Perhatikan bahwa ini tidak khusus untuk Solaris 11. Pengelompokan paket yang serupa sudah ada di bawah Solaris 10 dan sebelumnya dan utilitas yang sesuai dengan POSIX hanya diinstal pada metaclusters "Pengguna Akhir", "Pengembang" dan "Instalasi penuh". Memiliki sistem atau zona yang diinstal dengan "Core" atau "Networking support" metacluster kemudian akan mengarah pada
xpg4
masalah yang hilang sama .Perhatikan juga bahwa kurangnya
/usr/xpg4/bin/awk
sistem Solaris 11 bukan kegagalan kepatuhan POSIX. Hanya instalasi Solaris lengkap yang digunakan dalam sebagian besar pengujian yang dilakukan oleh Oracle dan ISV, termasuk program sertifikasi Open Group . Instalasi yang dikurangi didukung tetapi tidak memenuhi syarat .Jika Anda mendistribusikan skrip shell (atau aplikasi yang menyematkan skrip shell / perintah shell panggilan) untuk Solaris 11, Anda hanya perlu mendefinisikan
/system/xopen/xcu4
sebagai dependensi dalam paket IPS mereka dan installer akan secara otomatis melakukan apa yang diperlukan agar skrip bekerja dengan benar:Lihat https://docs.oracle.com/cd/E53394_01/html/E54820/dependtypes.html
sumber
awk
selalu hadir pada sistem Solaris atau zona non global sehingga masalahnya bukan tentang ketersediaan tetapi terbatas pada nama perintah (nawk
vsawk
). docs.oracle.com/cd/E53394_01/html/E54763/nawk-1.htmlnawk
hampir POSIX (tidak mendukungCONVFMT
misalnya), tapi ya, setidaknya itu tidak seburukgrep
(yang tidak memiliki POSIX-e
/-E
misalnya) atautr
(yang tidak memilikitr a-f A-F
).