Pelajari Perintah Linux - gawk

Nama

gawk - pemindaian pola dan bahasa pemrosesan

Ringkasan

gawk [POSIX atau opsi gaya GNU] -f file-program [ - ] file ...
gawk [POSIX atau opsi gaya GNU] [ - ] file program-teks ...

pgawk [POSIX atau opsi gaya GNU] -f file-program [ - ] file ...
pgawk [POSIX atau opsi gaya GNU] [ - ] file program-teks ...

Deskripsi

Gawk adalah implementasi Proyek GNU dari bahasa pemrograman AWK. Ini sesuai dengan definisi bahasa di POSIX 1003.2 Bahasa Komando Dan Utilitas Standar. Versi ini pada gilirannya didasarkan pada deskripsi dalam Bahasa Pemrograman AWK , oleh Aho, Kernighan, dan Weinberger, dengan fitur tambahan yang ditemukan di versi Sistem V Release 4 dari UNIX awk . Gawk juga menyediakan ekstensi awpu Bell Laboratories yang lebih baru, dan sejumlah ekstensi khusus GNU.

Pgawk adalah versi profil dari gawk . Ini identik dalam segala hal untuk melongo , kecuali bahwa program berjalan lebih lambat, dan secara otomatis menghasilkan profil eksekusi di file awkprof.out ketika selesai. Lihat opsi --profile , di bawah ini.

Baris perintah terdiri dari opsi untuk melihat dirinya sendiri, teks program AWK (jika tidak disediakan melalui opsi -f atau --file ), dan nilai-nilai harus tersedia dalam variabel ARGV dan AWK yang telah ditentukan sebelumnya.

Format Opsi

Pilihan Gawk dapat berupa opsi POSIX satu huruf tradisional, atau opsi panjang gaya GNU. Pilihan POSIX dimulai dengan satu `` - '', sementara opsi panjang dimulai dengan `` - ''. Pilihan panjang disediakan untuk fitur-fitur khusus GNU dan untuk fitur-fitur yang dimandatkan oleh POSIX.

Mengikuti standar POSIX, gawk -specific options disediakan melalui argumen ke opsi -W . Beberapa opsi- W dapat diberikan Setiap opsi- W memiliki opsi panjang yang sesuai, seperti yang dijelaskan di bawah ini. Argumen untuk opsi panjang dapat digabungkan dengan opsi oleh tanda = , tanpa spasi, atau mungkin disediakan dalam argumen baris perintah berikutnya. Opsi panjang dapat disingkat, asalkan singkatannya tetap unik.

Pilihan

Gawk menerima opsi berikut, terdaftar menurut abjad.

-F fs

--field-separator fs Gunakan fs untuk pemisah field input (nilai variabel FS yang telah ditetapkan).

-v var = val

--assign var = val Tetapkan nilai val ke variabel var , sebelum eksekusi program dimulai. Nilai variabel tersebut tersedia untuk blok BEGIN dari program AWK.

-f file-program

--file program-file Baca sumber program AWK dari file-file program , bukan dari argumen baris perintah pertama. Beberapa opsi -f (atau --file ) dapat digunakan.

-mf NNN

-mr NNN Mengatur berbagai batas memori ke nilai NNN . Flag f mengatur jumlah field maksimum, dan r flag menetapkan ukuran record maksimum. Dua flag dan opsi -m ini berasal dari versi penelitian Bell Laboratories dari UNIX awk . Mereka diabaikan oleh gawk , karena gawk tidak memiliki batas yang ditentukan sebelumnya.

-W compat

-W tradisional

--compat

--traditional Run dalam mode kompatibilitas . Dalam mode kompatibilitas, gawk berperilaku identik dengan UNIX awk ; tidak ada satu pun ekstensi khusus GNU yang diakui. Penggunaan --traditional lebih disukai daripada bentuk lain dari opsi ini. Lihat GNU EXTENSIONS , di bawah ini, untuk informasi lebih lanjut.

-W copyleft

-W hak cipta

--copyleft

--copyright Cetak versi pendek dari pesan informasi hak cipta GNU pada output standar dan keluar dengan sukses.

-W dump-variables [ = file ]

--dump-variables [ = file ] Mencetak daftar variabel global yang diurutkan, jenis dan nilai akhir untuk file . Jika tidak ada file yang disediakan, gawk menggunakan file bernama awkvars.out di direktori saat ini.

Memiliki daftar semua variabel global adalah cara yang baik untuk mencari kesalahan tipografi dalam program Anda. Anda juga akan menggunakan opsi ini jika Anda memiliki program besar dengan banyak fungsi, dan Anda ingin memastikan bahwa fungsi Anda tidak secara tidak sengaja menggunakan variabel global yang Anda maksud untuk menjadi lokal. (Ini adalah kesalahan yang sangat mudah dilakukan dengan nama variabel sederhana seperti i , j , dan sebagainya.)

Bantuan -W

-W penggunaan

--membantu

--usage Cetak ringkasan yang relatif singkat dari opsi yang tersedia pada output standar. (Sesuai Standar Pengkodean GNU , opsi-opsi ini menyebabkan jalan keluar yang segera dan berhasil.)

-W lint [ = fatal ]

--internet [ = fatal ] Memberikan peringatan tentang konstruksi yang meragukan atau tidak portabel untuk implementasiAWK lainnya. Dengan argumen opsional fatal , peringatan serat menjadi kesalahan fatal. Ini mungkin drastis, tetapi penggunaannya tentu akan mendorong pengembangan program AWK yang lebih bersih.

-W lint-tua

--lint-old Memberikan peringatan tentang konstruk yang tidak portabel ke versi asli Unix awk .

-W gen-po

--gen-po Pindai dan parsing program AWK, dan hasilkan file format GNU .po pada output standar dengan entri untuk semua string yang dapat dilokalisasi dalam program. Program itu sendiri tidak dijalankan. Lihat distribusi gettext GNU untuk informasi lebih lanjut tentang file .po .

-W non-desimal-data

--non-desimal-data Kenali nilai oktal dan heksadesimal dalam data input. Gunakan opsi ini dengan sangat hati-hati!

-W posix

--posix Ini mengaktifkan mode kompatibilitas , dengan batasan tambahan berikut:

*

\ x escape sequence tidak dikenali.

*

Hanya ruang dan tab yang bertindak sebagai pemisah bidang ketika FS diatur ke satu ruang, baris baru tidak.

*

Anda tidak dapat melanjutkan baris berikutnya ? dan :.

*

Fungsi sinonim untuk fungsi kata kunci tidak dikenali.

*

Operator ** dan ** = tidak dapat digunakan di tempat ^ dan ^ = .

*

Fungsi fflush () tidak tersedia.

-W profil [ = prof_file ]

--profile [ = prof_file ] Kirim data profil ke prof_file . Standarnya adalah awkprof.out . Saat dijalankan dengan gawk , profil itu hanya versi "cukup tercetak" dari program. Ketika dijalankan dengan pgawk , profil berisi jumlah eksekusi dari setiap pernyataan dalam program di margin kiri dan jumlah panggilan fungsi untuk setiap fungsi yang ditentukan pengguna.

-W interval ulang

--re-interval Aktifkan penggunaan ekspresi interval dalam pencocokan ekspresi reguler (lihat Regular Expressions , di bawah). Ekspresi interval tidak tersedia secara tradisional dalam bahasa AWK. Standar POSIX menambahkannya, untuk membuat awk dan egrep konsisten satu sama lain. Namun, penggunaannya kemungkinan akan memecah program AWK lama, jadi hanya berikan mereka jika diminta dengan opsi ini, atau ketika --posix ditentukan.

-W sumber program-teks

--sumber program-teks Gunakan teks- program sebagai kode sumber program AWK. Opsi ini memungkinkan pencampuran fungsi pustaka yang mudah (digunakan melalui opsi -f dan --file ) dengan kode sumber yang dimasukkan pada baris perintah. Ini ditujukan terutama untuk program AWK menengah hingga besar yang digunakan dalam skrip shell.

-W versi

--versi Informasi versi cetak untuk salinan khusus dari gawk pada output standar. Ini berguna terutama untuk mengetahui apakah salinan gawk saat ini di sistem Anda sudah diperbarui sehubungan dengan apa pun yang didistribusikan oleh Yayasan Perangkat Lunak Gratis. Ini juga berguna saat melaporkan bug. (Sesuai Standar Pengkodean GNU , opsi-opsi ini menyebabkan jalan keluar yang segera dan berhasil.)

- Memberi sinyal pada akhir opsi. Ini berguna untuk memungkinkan argumen lebih lanjut ke program AWK sendiri untuk memulai dengan `` - ''. Ini terutama untuk konsistensi dengan argumen parsing konvensi yang digunakan oleh sebagian besar program POSIX lainnya.

Dalam mode kompatibilitas, opsi lain ditandai sebagai tidak valid, tetapi sebaliknya diabaikan. Dalam operasi normal, selama teks program telah disediakan, opsi yang tidak diketahui diteruskan ke program AWK dalam array ARGV untuk diproses. Ini sangat berguna untuk menjalankan program AWK melalui mekanisme interpreter executable `` #! '.

PELAKSANAAN PROGRAM AWK

Program AWK terdiri dari urutan pernyataan pattern-action dan definisi fungsi opsional.

pola { pernyataan tindakan }

nama fungsi ( daftar parameter ) { pernyataan }

Gawk pertama kali membaca sumber program dari file-program (s) jika ditentukan, dari argumen ke --sumber , atau dari argumen non-opsi pertama pada baris perintah. Opsi -f dan --source mungkin digunakan beberapa kali pada baris perintah. Gawk membaca teks program seolah-olah semua teks sumber program dan baris perintah telah digabungkan bersama. Ini berguna untuk membangun perpustakaan fungsi AWK, tanpa harus memasukkannya ke dalam setiap program AWK baru yang menggunakannya. Ini juga menyediakan kemampuan untuk mencampur fungsi perpustakaan dengan program-program baris perintah.

Variabel lingkungan AWKPATH menentukan jalur pencarian yang akan digunakan ketika mencari file sumber yang bernama dengan opsi -f . Jika variabel ini tidak ada, jalur default adalah ".: / Usr / local / share / awk" . (Direktori sebenarnya dapat bervariasi, tergantung pada bagaimana gawk dibangun dan dipasang.) Jika nama file yang diberikan ke opsi -f mengandung karakter `` / '', tidak ada pencarian path yang dilakukan.

Gawk menjalankan program AWK dengan urutan berikut. Pertama, semua tugas variabel yang ditentukan melalui opsi -v dilakukan. Selanjutnya, gawk menyusun program menjadi bentuk internal. Kemudian, gawk mengeksekusi kode dalam blok BEGIN (jika ada), dan kemudian melanjutkan untuk membaca setiap file yang dinamai dalam array ARGV . Jika tidak ada file yang disebutkan di baris perintah, gawk membaca input standar.

Jika nama file pada baris perintah memiliki bentuk var = val itu diperlakukan sebagai variabel tugas. Variabel var akan diberi nilai val . (Ini terjadi setelah blok BEGIN (s) telah dijalankan.) Penetapan variabel baris perintah paling berguna untuk menetapkan nilai secara dinamis ke variabel yang digunakan AWK untuk mengontrol bagaimana input dipecah ke dalam bidang dan rekaman. Ini juga berguna untuk mengontrol status jika diperlukan beberapa melewati satu file data.

Jika nilai elemen tertentu dari ARGV kosong ( "" ), gawk melompati itu.

Untuk setiap catatan dalam masukan, gawk menguji untuk melihat apakah itu cocok dengan pola apa pun dalam program AWK. Untuk setiap pola yang cocok dengan catatan, tindakan yang terkait dijalankan. Pola diuji dalam urutan yang terjadi dalam program.

Akhirnya, setelah semua input habis, gawk mengeksekusi kode di blok END (jika ada).

Variabel, Catatan, dan Kolom

Variabel AWK bersifat dinamis; mereka menjadi ada ketika mereka pertama kali digunakan. Nilai-nilai mereka adalah angka atau string floating-point, atau keduanya, tergantung bagaimana mereka digunakan. AWK juga memiliki satu larik dimensi; array dengan beberapa dimensi dapat disimulasikan. Beberapa variabel yang telah ditentukan ditetapkan sebagai program berjalan; ini akan dijelaskan sesuai kebutuhan dan dirangkum di bawah ini.

Rekaman

Biasanya, catatan dipisahkan oleh karakter baris baru. Anda dapat mengontrol bagaimana catatan dipisahkan dengan menetapkan nilai ke RS variabel built-in. Jika RS adalah karakter tunggal, karakter itu memisahkan rekaman. Jika tidak, RS adalah ekspresi reguler. Teks dalam input yang cocok dengan persamaan reguler ini memisahkan rekaman. Namun, dalam mode kompatibilitas, hanya karakter pertama dari nilai string yang digunakan untuk memisahkan rekaman. Jika RS diatur ke string nol, maka catatan dipisahkan oleh garis kosong. Ketika RS diatur ke string nol, karakter baris baru selalu bertindak sebagai pemisah lapangan, selain nilai apa pun yang mungkin dimiliki FS .

Fields

Ketika setiap input record dibaca, gawk membagi record ke dalam field , menggunakan nilai dari variabel FS sebagai pemisah field. Jika FS adalah karakter tunggal, bidang dipisahkan oleh karakter itu. Jika FS adalah string null, maka setiap karakter individu menjadi bidang yang terpisah. Jika tidak, FS diharapkan menjadi ekspresi reguler penuh. Dalam kasus khusus bahwa FS adalah ruang tunggal, bidang dipisahkan oleh run of spaces dan / atau tab dan / atau baris baru. (Tapi lihat pembahasan --posix , di bawah). CATATAN: Nilai IGNORECASE (lihat di bawah) juga mempengaruhi bagaimana bidang dipisah ketika FS adalah ekspresi reguler, dan bagaimana catatan dipisahkan ketika RS adalah ekspresi reguler.

Jika variabel FIELDWIDTHS disetel ke daftar nomor yang dipisahkan spasi, setiap bidang diharapkan memiliki lebar tetap, dan melonggarkan membagi catatan menggunakan lebar yang ditentukan. Nilai FS diabaikan. Menetapkan nilai baru untuk FS mengesampingkan penggunaan FIELDWIDTHS , dan mengembalikan perilaku default.

Setiap bidang dalam catatan input dapat direferensikan oleh posisinya, $ 1 , $ 2 , dan seterusnya. $ 0 adalah seluruh catatan. Bidang tidak perlu direferensikan oleh konstanta:

n = 5
cetak $ n

mencetak bidang kelima dalam rekaman input.

Variabel NF diatur ke jumlah total bidang dalam catatan input.

Referensi ke bidang yang tidak ada (yaitu bidang setelah $ NF ) menghasilkan string-nol. Namun, menetapkan ke bidang yang tidak ada (misalnya, $ (NF + 2) = 5 ) meningkatkan nilai NF , membuat setiap bidang intervensi dengan string null sebagai nilainya, dan menyebabkan nilai $ 0 akan dihitung ulang, dengan ladang dipisahkan oleh nilai OFS . Referensi ke kolom bernomor negatif menyebabkan kesalahan fatal. Decrementing NF menyebabkan nilai field melewati nilai baru yang hilang, dan nilai $ 0 akan dihitung ulang, dengan field dipisahkan oleh nilai OFS .

Menetapkan nilai ke bidang yang ada menyebabkan seluruh catatan untuk dibangun kembali ketika $ 0 dirujuk. Demikian pula, menetapkan nilai ke $ 0 menyebabkan record akan di-resplit, membuat nilai baru untuk field.

Variabel Built-in

Variabel bawaan Gawk adalah:

ARGC

Jumlah argumen baris perintah (tidak termasuk opsi untuk melongo , atau sumber program).

ARGIND

Indeks dalam ARGV dari file saat ini sedang diproses.

ARGV

Larik argumen baris perintah. Array ini diindeks dari 0 ke ARGC - 1. Secara dinamis mengubah isi ARGV dapat mengontrol file yang digunakan untuk data.

BINMODE

Pada sistem non-POSIX, tentukan penggunaan mode `` binary 'untuk semua file I / O. Nilai numerik 1, 2, atau 3, menentukan bahwa file input, file output, atau semua file, masing-masing, harus menggunakan I / O biner. Nilai string "r" , atau "w" menentukan bahwa file input, atau file output, masing-masing, harus menggunakan I / O biner. Nilai string "rw" atau "wr" menentukan bahwa semua file harus menggunakan I / O biner. Nilai string lainnya diperlakukan sebagai "rw" , tetapi menghasilkan pesan peringatan.

CONVFMT

Format konversi untuk angka, "% .6g" , secara default.

MENGEPUNG

Array berisi nilai-nilai lingkungan saat ini. Array ini diindeks oleh variabel lingkungan, setiap elemen menjadi nilai dari variabel itu (misalnya, ENVIRON ["HOME"] mungkin adalah / home / arnold ). Mengubah array ini tidak mempengaruhi lingkungan yang terlihat oleh program-program yang melongo memunculkan melalui redirection atau fungsi sistem () .

ERRNO

Jika terjadi kesalahan sistem baik melakukan redirection untuk getline , selama membaca untuk getline , atau selama close () , maka ERRNO akan berisi string yang menjelaskan kesalahan. Nilai ini tunduk pada terjemahan di tempat yang bukan bahasa Inggris.

FIELDWIDTHS

Daftar spasi lapangan yang dipisahkan spasi putih. Ketika diatur, gawk mem-parsing input ke dalam bidang lebar tetap, daripada menggunakan nilai variabel FS sebagai pemisah bidang.

NAMA FILE

Nama file masukan saat ini. Jika tidak ada file yang ditentukan pada baris perintah, nilai FILENAME adalah `` - ''. Namun, FILENAME tidak terdefinisi di dalam blok BEGIN (kecuali ditetapkan oleh getline ).

FNR

Nomor catatan input dalam file input saat ini.

FS

Pemisah bidang input, spasi secara default. Lihat Fields , di atas.

IGNORECASE

Mengontrol sensitivitas huruf besar dari semua ekspresi reguler dan operasi string. Jika IGNORECASE memiliki nilai bukan nol, maka perbandingan string dan pencocokan pola dalam aturan, pembagian bidang dengan FS , pemisahan catatan dengan RS , persamaan reguler yang cocok dengan ~ dan ~ , dan gensub () , gsub () , indeks () , fungsi match () , split () , dan sub () built-in semua mengabaikan case ketika melakukan operasi ekspresi reguler. CATATAN: Array subscripting tidak terpengaruh, begitu pula fungsi asort () .

Jadi, jika IGNORECASE tidak sama dengan nol, / aB / cocok dengan semua string "ab" , "aB" , "Ab" , dan "AB" . Seperti halnya semua variabel AWK, nilai awal IGNORECASE adalah nol, sehingga semua ekspresi reguler dan operasi string biasanya case-sensitive. Di bawah Unix, set karakter ISO 8859-1 Latin-1 penuh digunakan saat mengabaikan case.

LINT

Memberikan kontrol dinamis opsi --lint dari dalam program AWK. Ketika benar, Gawk mencetak peringatan serat. Ketika salah, tidak. Ketika diberi nilai string "fatal" , peringatan serat menjadi kesalahan fatal, persis seperti --internet = fatal . Nilai nyata lainnya hanya mencetak peringatan.

NF

Jumlah bidang dalam catatan masukan saat ini.

NR

Jumlah total catatan input yang terlihat sejauh ini.

OFMT

Format output untuk angka, "% .6g" , secara default.

OFS

Pemisah bidang keluaran, spasi secara default.

ORS

Pemisah rekor output, secara default baris baru.

PROCINFO

Unsur-unsur array ini memberikan akses ke informasi tentang program AWK berjalan. Pada beberapa sistem, mungkin ada elemen dalam larik, "grup1" melalui "grup n " untuk beberapa n , yang merupakan jumlah kelompok pelengkap yang dimiliki proses tersebut. Gunakan operator di dalam untuk menguji elemen-elemen ini. Unsur-unsur berikut dijamin akan tersedia:

PROCINFO ["egid"]

nilai panggilan sistem getegid (2).

PROCINFO ["euid"]

nilai dari geteuid (2) system call.

PROCINFO ["FS"]

"FS" jika pembagian kolom dengan FS berlaku, atau "FIELDWIDTHS" jika pembagian bidang dengan FIELDWIDTHS berlaku.

PROCINFO ["gid"]

nilai panggilan sistem getgid (2).

PROCINFO ["pgrpid"]

ID grup proses dari proses saat ini.

PROCINFO ["pid"]

ID proses dari proses saat ini.

PROCINFO ["ppid"]

ID proses induk dari proses saat ini.

PROCINFO ["uid"]

nilai dari getuid (2) system call.

RS

Pemisah catatan input, secara default baris baru.

RT

Terminator catatan. Gawk menyetel RT ke teks input yang cocok dengan karakter atau ekspresi reguler yang ditentukan oleh RS .

RSTART

Indeks karakter pertama yang dicocokkan dengan match () ; 0 jika tidak ada kecocokan. (Ini menyiratkan bahwa indeks karakter mulai dari satu.)

RLENGTH

Panjang string yang dicocokkan dengan match () ; -1 jika tidak ada pertandingan.

SUBSEP

Karakter yang digunakan untuk memisahkan beberapa subskrip dalam elemen array, secara default "\ 034" .

TEXTDOMAIN

Domain teks dari program AWK; digunakan untuk mencari terjemahan lokal untuk string program.

Array

Array yang dituliskan dengan ekspresi antara tanda kurung siku ( [ dan ] ). Jika ekspresi adalah daftar ekspresi ( expr , expr ...) maka array subscript adalah string yang terdiri dari gabungan nilai (string) dari setiap ekspresi, dipisahkan oleh nilai dari variabel SUBSEP . Fasilitas ini digunakan untuk mensimulasikan larik berdimensi ganda. Sebagai contoh:

i = "A"; j = "B"; k = "C"
x [i, j, k] = "hello, world \ n"

memberikan string "hello, world \ n" ke elemen array x yang diindeks oleh string "A \ 034B \ 034C" . Semua array dalam AWK bersifat asosiatif, yaitu diindeks oleh nilai string.

Operator khusus dalam dapat digunakan dalam pernyataan if atau while untuk melihat apakah array memiliki indeks yang terdiri dari nilai tertentu.

jika array cetak (val in array) [val]

Jika array memiliki beberapa subscript, gunakan (i, j) dalam array .

Dalam konstruk juga dapat digunakan untuk loop untuk iterate atas semua elemen array.

Elemen dapat dihapus dari larik menggunakan pernyataan penghapusan . Pernyataan penghapusan juga dapat digunakan untuk menghapus seluruh konten suatu larik, hanya dengan menentukan nama larik tanpa subskrip.

Pengetikan dan Konversi Variabel

Variabel dan bidang dapat berupa angka (floating point), atau string, atau keduanya. Bagaimana nilai suatu variabel ditafsirkan tergantung pada konteksnya. Jika digunakan dalam ekspresi numerik, itu akan dianggap sebagai angka, jika digunakan sebagai string maka akan dianggap sebagai string.

Untuk memaksa variabel diperlakukan sebagai angka, tambahkan 0 ke sana; untuk memaksanya diperlakukan sebagai string, gabungkan dengan string null.

Ketika string harus dikonversi menjadi angka, konversi dilakukan menggunakan strtod (3). Angka diubah menjadi string dengan menggunakan nilai CONVFMT sebagai string format untuk sprintf (3), dengan nilai numerik variabel sebagai argumen. Namun, meskipun semua angka di AWK adalah floating-point, nilai integral selalu dikonversi sebagai bilangan bulat. Dengan demikian, diberikan

CONVFMT = "% 2.2f" a = 12 b = a ""

variabel b memiliki nilai string "12" dan bukan "12.00" .

Gawk melakukan perbandingan sebagai berikut: Jika dua variabel adalah numerik, mereka dibandingkan secara numerik. Jika satu nilai adalah angka dan yang lain memiliki nilai string yang merupakan `` string numerik, '' maka perbandingan juga dilakukan secara numerik. Jika tidak, nilai numerik diubah menjadi string dan perbandingan string dilakukan. Dua string dibandingkan, tentu saja, sebagai string. Perhatikan bahwa standar POSIX menerapkan konsep `` string numerik '' di mana-mana, bahkan ke string konstanta. Namun, ini jelas salah, dan melongo tidak melakukan ini. (Untungnya, ini diperbaiki dalam versi standar selanjutnya.)

Perhatikan bahwa konstanta string, seperti "57" , bukan string numerik, mereka adalah konstanta string. Gagasan `` string numerik '' hanya berlaku untuk bidang, masukan getline , FILENAME , elemen ARGV , elemen ENVIRON dan elemen dari array yang dibuat oleh split () yang merupakan string numerik. Ide dasarnya adalah bahwa input pengguna , dan hanya input pengguna, yang terlihat numerik, harus diperlakukan seperti itu.

Variabel tidak diinisialisasi memiliki nilai numerik 0 dan nilai string "" (null, atau kosong, string).

Konstanta Octal dan Hexadecimal

Dimulai dengan versi 3.1 dari gawk, Anda dapat menggunakan konstanta C-style octal dan hexadecimal di kode sumber program AWK Anda. Misalnya, nilai oktal 011 sama dengan desimal 9 , dan nilai heksadesimal 0x11 sama dengan desimal 17.

String Constants

Konstanta string dalam AWK adalah urutan karakter yang dilampirkan di antara tanda kutip ganda ( " ). Dalam string, urutan pelarian tertentu diakui, seperti dalam C. Ini adalah:

\\

Sebuah backslash harfiah.

\Sebuah

Karakter `` lansiran ''; biasanya karakter ASCII BEL.

\ b

menghapus.

\ f

form-feed.

\ n

garis baru.

r

Kereta kembali.

\ t

tab horizontal.

\ v

tab vertikal.

\ x digit heksa

Karakter yang diwakili oleh string digit heksadesimal mengikuti \ x . Seperti dalam ANSIC, semua digit heksadesimal berikut dianggap sebagai bagian dari urutan pelolosan. (Fitur ini harus memberi tahu kami sesuatu tentang desain bahasa oleh komite.) Misalnya, "\ x1B" adalah karakter ASCIIESC (escape).

\ ddd

Karakter yang diwakili oleh urutan digit oktal 1-, 2-, atau 3 digit. Misalnya, "\ 033" adalah karakter ASCII ESC (escape).

\ c

Karakter literal c .

Urutan pelarian juga dapat digunakan di dalam ekspresi reguler konstan (misalnya, / [\ t \ f \ n \ r \ v] / cocok dengan karakter whitespace).

Dalam mode kompatibilitas, karakter yang direpresentasikan oleh urutan escape oktal dan heksadesimal diperlakukan secara harfiah ketika digunakan dalam konstanta ekspresi reguler. Dengan demikian, / a \ 52b / setara dengan / a \ * b / .

Pola dan Tindakan

AWK adalah bahasa yang berorientasi pada garis. Pola itu muncul lebih dulu, lalu aksi. Pernyataan tindakan diapit dalam { dan } . Entah pola itu mungkin hilang, atau tindakannya mungkin hilang, tetapi, tentu saja, tidak keduanya. Jika pola tersebut hilang, tindakan dijalankan untuk setiap catatan masukan tunggal. Tindakan yang hilang setara dengan

{print}

yang mencetak seluruh catatan.

Komentar dimulai dengan karakter `` # '', dan lanjutkan hingga akhir baris. Baris kosong dapat digunakan untuk memisahkan pernyataan. Biasanya, pernyataan berakhir dengan garis baru, namun, ini bukan kasus untuk baris yang diakhiri dengan ``, '', { , ? , : , && , atau || . Garis-garis yang berakhiran atau yang lainnya juga secara otomatis melanjutkan pernyataannya di baris berikutnya. Dalam kasus lain, satu baris dapat dilanjutkan dengan mengakhirinya dengan ', dalam hal mana baris baru akan diabaikan.

Beberapa pernyataan dapat diletakkan pada satu baris dengan memisahkannya dengan ``; ''. Ini berlaku untuk kedua pernyataan di dalam bagian tindakan pasangan pola-aksi (kasus biasa), dan untuk pernyataan pola-tindakan itu sendiri.

Pola

Pola AWK mungkin salah satu dari yang berikut:

BEGIN END / ekspresi reguler / pola ekspresi relasional && pola pola || pola pola ? pola : pola ( pola ) ! pola pola1 , pola2

BEGIN dan END adalah dua jenis pola khusus yang tidak diuji terhadap input. Bagian tindakan dari semua pola BEGIN digabungkan seolah-olah semua pernyataan telah ditulis dalam satu blok BEGIN tunggal. Mereka dieksekusi sebelum masukan apa pun dibaca. Demikian pula, semua blok END digabung, dan dieksekusi ketika semua input habis (atau ketika pernyataan keluar dijalankan). Pola BEGIN dan END tidak dapat dikombinasikan dengan pola lain dalam ekspresi pola. Pola BEGIN dan END tidak boleh memiliki bagian tindakan yang hilang.

Untuk / ekspresi / pola reguler , pernyataan yang terkait dijalankan untuk setiap catatan masukan yang cocok dengan ekspresi reguler. Ekspresi reguler sama dengan yang ada di egrep (1), dan dirangkum di bawah ini.

Suatu ekspresi relasional dapat menggunakan salah satu operator yang didefinisikan di bawah ini dalam bagian pada tindakan. Ini umumnya menguji apakah bidang-bidang tertentu sesuai dengan ekspresi reguler tertentu.

The && , || , dan ! operator logis, logis, ATAU, dan logis TIDAK, masing-masing, seperti dalam C. Mereka melakukan evaluasi sirkuit pendek, juga seperti dalam C, dan digunakan untuk menggabungkan ekspresi pola yang lebih primitif. Seperti dalam kebanyakan bahasa, tanda kurung dapat digunakan untuk mengubah urutan evaluasi.

Operator :: seperti operator yang sama di C. Jika pola pertama benar maka pola yang digunakan untuk pengujian adalah pola kedua, jika tidak maka itu adalah pola ketiga. Hanya satu dari pola kedua dan ketiga yang dievaluasi.

Pola1 , pola2 bentuk ekspresi disebut pola rentang . Cocok dengan semua catatan masukan yang dimulai dengan catatan yang cocok dengan pola1 , dan berlanjut hingga rekaman yang cocok dengan pola2 , inklusif. Itu tidak menggabungkan dengan jenis lain dari ekspresi pola.

Ekspresi Reguler

Ekspresi reguler adalah jenis tambahan yang ditemukan di egrep . Mereka terdiri dari karakter sebagai berikut:

c

cocok dengan non-metacharacter c .

\ c

cocok dengan karakter literal c .

.

cocok dengan karakter apa pun termasuk baris baru.

^

cocok dengan awal string.

$

cocok dengan akhir string.

[ abc ... ]

daftar karakter, cocok dengan salah satu karakter abc ....

[^ abc ... ]

daftar karakter yang disamakan, cocok dengan karakter apa pun kecuali abc ....

r1 | r2

silih berganti: cocok dengan r1 atau r2 .

r1r2

rentetan: cocok dengan r1 , dan kemudian r2 .

r +

cocok dengan satu atau lebih r .

r *

cocok dengan nol atau lebih r .

r ?

cocok dengan nol atau satu r .

( r )

pengelompokan: pertandingan r .

r { n }

r { n ,}

r { n , m } Satu atau dua angka di dalam tanda kurung menunjukkan ekspresi interval . Jika ada satu nomor dalam kurung kurawal, ekspresi reguler sebelumnya r diulang sebanyak n kali. Jika ada dua angka yang dipisahkan oleh koma, r diulangi n kali m . Jika ada satu nomor diikuti dengan koma, maka r diulang setidaknya n kali.

Ekspresi interval hanya tersedia jika --posix atau --re-interval ditentukan pada baris perintah.

\ y

cocok dengan string kosong di awal atau akhir kata.

\ B

cocok dengan string kosong dalam sebuah kata.

\ <

cocok dengan string kosong di awal kata.

\>

cocok dengan string kosong di akhir kata.

\ w

cocok dengan karakter kata-konstituen (huruf, angka, atau garis bawah).

\ W

cocok dengan karakter apa pun yang bukan konstituen kata.

\ '

cocok dengan string kosong di awal buffer (string).

\ '

cocok dengan string kosong di ujung buffer.

Urutan pelarian yang valid dalam konstanta string (lihat di bawah) juga berlaku dalam ekspresi reguler.

Kelas karakter adalah fitur baru yang diperkenalkan dalam standar POSIX. Kelas karakter adalah notasi khusus untuk mendeskripsikan daftar karakter yang memiliki atribut tertentu, tetapi di mana karakter sebenarnya dapat bervariasi dari satu negara ke negara lain dan / atau dari set karakter ke set karakter. Misalnya, gagasan tentang karakter alfabet berbeda di AS dan di Prancis.

Kelas karakter hanya valid dalam ekspresi reguler di dalam tanda kurung dari daftar karakter. Kelas karakter terdiri dari [: , kata kunci yang menunjukkan kelas, dan :] . Kelas karakter yang ditentukan oleh standar POSIX adalah:

[: alnum:]

Karakter alfanumerik.

[:alfa:]

Karakter alfabet.

[:kosong:]

Karakter spasi atau tab.

[: cntrl:]

Kontrol karakter.

[:angka:]

Karakter numerik.

[:grafik:]

Karakter yang dapat dicetak dan terlihat. (Ruang A dapat dicetak, tetapi tidak terlihat, sementara a adalah keduanya.)

[:menurunkan:]

Huruf-huruf alfabet huruf kecil.

[:mencetak:]

Karakter yang dapat dicetak (karakter yang bukan karakter kontrol.)

[: punct:]

Karakter tanda baca (karakter yang bukan huruf, angka, karakter kontrol, atau karakter spasi).

[:ruang:]

Karakter ruang (seperti ruang, tab, dan formfeed, untuk beberapa nama).

[:atas:]

Huruf-huruf alfabet huruf besar.

[: xdigit:]

Karakter yang merupakan digit heksadesimal.

Misalnya, sebelum standar POSIX, untuk mencocokkan karakter alfanumerik, Anda harus menulis / [A-Za-z0-9] / . Jika set karakter Anda memiliki karakter alfabet lain di dalamnya, ini tidak akan cocok dengan mereka, dan jika karakter Anda diatur secara berbeda dari ASCII, ini mungkin tidak cocok dengan karakter alfanumerik ASCII. Dengan kelas karakter POSIX, Anda dapat menulis / [[: alnum:]] / , dan ini cocok dengan karakter alfabetik dan numerik dalam rangkaian karakter Anda.

Dua tambahan urutan khusus dapat muncul dalam daftar karakter. Ini berlaku untuk set karakter non-ASCII, yang dapat memiliki simbol tunggal (disebut elemen penyatuan ) yang diwakili dengan lebih dari satu karakter, serta beberapa karakter yang setara untuk menyusun , atau menyortir, tujuan. (Misalnya, dalam bahasa Prancis, huruf biasa `` e '' dan huruf beraksen e `setara.)

Mengumpulkan Simbol

Simbol penyusun adalah elemen penyatuan multi-karakter yang disertakan dalam [. dan .] . Misalnya, jika ch adalah elemen pengumpul, maka [[ ch ]] adalah ekspresi reguler yang cocok dengan elemen susun ini, sedangkan [ch] adalah ekspresi reguler yang cocok dengan c atau h .

Kelas Kesetaraan

Kelas kesetaraan adalah nama spesifik lokal untuk daftar karakter yang setara. Nama diapit dalam [= dan =] . Misalnya, nama e dapat digunakan untuk mewakili semua `` e ',' `e ',' 'dan` `e`.' 'Dalam kasus ini, [[= e =]] adalah ekspresi reguler yang cocok dengan salah satu dari e , e ' , atau e` .

Fitur-fitur ini sangat berharga di lokasi yang tidak berbahasa Inggris. Fungsi pustaka yang digunakan untuk pencocokan ekspresi reguler saat ini hanya mengenali kelas karakter POSIX; mereka tidak mengenali susunan simbol atau kelas ekivalen.

Operator \ y , \ B , \ < , \> , \ w , \ W , \ ' , dan \' khusus untuk melongo ; mereka adalah ekstensi berdasarkan fasilitas di pustaka ekspresi reguler GNU.

Berbagai opsi baris perintah mengontrol bagaimana gawk menafsirkan karakter dalam ekspresi reguler.

Tidak ada opsi

Dalam kasus standar, Gawk menyediakan semua fasilitas dari POSIX regular expressions dan operator ekspresi reguler GNU yang dijelaskan di atas. Namun, ekspresi interval tidak didukung.

--posix

Hanya ekspresi reguler POSIX yang didukung, operator GNU tidak istimewa. (Misalnya, \ w cocok dengan w literal). Interval ekspresi diizinkan.

--tradisional

Unix tradisional ekspresi biasa awk dicocokkan. Operator GNU tidak khusus, ekspresi interval tidak tersedia, dan tidak ada kelas karakter POSIX ( [[: alnum:]] dan seterusnya). Karakter yang dijelaskan oleh sekuens oktal dan heksadesimal diperlakukan secara harfiah, bahkan jika mereka mewakili metakarakter ekspresi reguler.

--re-interval

Biarkan ekspresi interval dalam ekspresi reguler, bahkan jika --traditional telah disediakan.

Tindakan

Pernyataan tindakan diapit oleh tanda kurung, { dan } . Pernyataan aksi terdiri dari pernyataan penugasan, kondisional, dan perulangan biasa yang ditemukan di sebagian besar bahasa. Operator, pernyataan kontrol, dan pernyataan input / output tersedia berpola setelahnya di C.

Operator

Para operator di AWK, dalam urutan penurunan preseden, adalah

( ... )

Pengelompokan

$

Referensi lapangan.

++ -

Kenaikan dan pengurangan, baik awalan dan postfix.

^

Exponentiation ( ** mungkin juga digunakan, dan ** = untuk operator penugasan).

+ -!

Unary plus, unary minus, dan negasi logis.

* /%

Perkalian, pembagian, dan modulus.

+ -

Penambahan dan pengurangan.

ruang

Penggabungan string.

<>

<=> =

! = == Operator relasional reguler.

~! ~

Pencocokan ekspresi reguler, kecocokan yang disangsikan. CATATAN: Jangan gunakan ekspresi reguler konstan ( / foo / ) di sisi kiri ~ atau ! ~ . Hanya gunakan satu di sisi kanan. Ekspresi / foo / ~ exp memiliki arti yang sama dengan (($ 0 ~ / foo /) ~ exp ) . Ini biasanya bukan yang dimaksudkan.

di

Keanggotaan Array.

&&

Logis DAN.

||

Logika OR.

?:

Ekspresi kondisional C Ini memiliki bentuk expr1 ? expr2 : expr3 . Jika expr1 bernilai true, nilai dari ekspresi adalah expr2 , selain itu expr3 . Hanya satu expr2 dan expr3 yang dievaluasi.

= + = - =

* = / =% = ^ = Penugasan. Tugas absolut ( var = value ) dan penugasan operator (bentuk lainnya) didukung.

Laporan Kontrol

Pernyataan kontrol adalah sebagai berikut:

if ( condition ) statement [ else statement ] while ( condition ) statement lakukan pernyataan sementara ( condition ) untuk ( expr1 ; expr2 ; expr3 ) statement untuk ( var in array ) pernyataan break continue delete array [ index ] hapus array exit [ expression ] { pernyataan }

Pernyataan I / O

Pernyataan input / output adalah sebagai berikut:

tutup ( file [ , bagaimana ] )

Tutup file, pipa atau proses bersama. Opsional bagaimana seharusnya hanya digunakan ketika menutup satu ujung dari pipa dua arah ke proses bersama. Itu harus berupa nilai string, baik "ke" atau "dari" .

getline

Set $ 0 dari catatan masukan berikutnya; atur NF , NR , FNR .

getline < file

Atur $ 0 dari arsip file selanjutnya ; mengatur NF .

getline var

Setel var dari record input berikutnya; atur NR , FNR .

getline var < file

Setel var dari record file selanjutnya .

perintah | getline [ var ]

Jalankan perintah pemipaan output menjadi $ 0 atau var , seperti di atas.

perintah | & getline [ var ]

Jalankan perintah sebagai proses bersama untuk memipet output menjadi $ 0 atau var , seperti di atas. Co-processes adalah ekstensi gawk .

berikutnya

Hentikan pemrosesan rekaman masukan saat ini. Catatan masukan berikutnya dibaca dan diproses dimulai dengan pola pertama dalam program AWK. Jika akhir dari data input tercapai, blok END (s), jika ada, dieksekusi.

nextfile

Hentikan pemrosesan file masukan saat ini. Catatan masukan berikutnya dibaca berasal dari file input berikutnya. FILENAME dan ARGIND diperbarui, FNR direset ke 1, dan pemrosesan dimulai kembali dengan pola pertama dalam program AWK. Jika akhir dari data input tercapai, blok END (s), jika ada, dieksekusi.

mencetak

Mencetak catatan saat ini. Catatan output diakhiri dengan nilai variabel ORS .

cetak daftar expr

Mencetak ekspresi. Setiap ekspresi dipisahkan oleh nilai variabel OFS . Catatan output diakhiri dengan nilai variabel ORS .

print expr-list > file

Mencetak ekspresi dalam file . Setiap ekspresi dipisahkan oleh nilai variabel OFS . Catatan output diakhiri dengan nilai variabel ORS .

printf fmt, daftar expr

Format dan cetak.

printf fmt, expr-list > file

Format dan cetak pada file .

sistem ( cmd-line )

Jalankan perintah cmd-line , dan kembalikan status keluar. (Ini mungkin tidak tersedia pada sistem non-POSIX.)

fflush ( [ file ] )

Bilas semua buffer yang terkait dengan file output terbuka atau file pipa. Jika file hilang, maka output standar memerah. Jika file adalah string null, maka semua file output terbuka dan pipa memiliki buffer mereka memerah.

Pengalihan keluaran tambahan diizinkan untuk dicetak dan dicetak .

cetak ... >> file

menambahkan keluaran ke file .

cetak ... | perintah

menulis di sebuah pipa.

cetak ... | & perintah

mengirim data ke proses bersama.

Perintah getline menghasilkan 0 pada akhir file dan -1 pada kesalahan. Setelah kesalahan, ERRNO berisi string yang menjelaskan masalah.

CATATAN: Jika menggunakan pipa atau co-proses untuk mendapatkan garis , atau dari cetak atau printf dalam satu lingkaran, Anda harus menggunakan tutup () untuk membuat contoh baru dari perintah. AWK tidak secara otomatis menutup pipa atau proses bersama ketika mereka mengembalikan EOF.

Pernyataan printf

Versi AWK dari pernyataan printf dan sprintf () berfungsi (lihat di bawah) menerima format spesifikasi konversi berikut:

% c

Karakter ASCII. Jika argumen yang digunakan untuk % c adalah numerik, itu dianggap sebagai karakter dan dicetak. Jika tidak, argumen diasumsikan sebagai string, dan satu-satunya karakter pertama dari string tersebut dicetak.

% d , % i

Angka desimal (bagian bilangan bulat).

% e,% E

Nomor titik apung dari formulir [-] d.ddddde [+ -] dd . Format % E menggunakan E, bukan e .

% f

Nomor titik apung dari formulir [-] ddd.dddddd .

% g,% G

Gunakan % e atau % f konversi, mana yang lebih pendek, dengan nol tidak signifikan ditekan. Format % G menggunakan % E bukannya % e .

%Hai

Nomor oktal unsigned (juga bilangan bulat).

% u Angka desimal tak bertanda (lagi, bilangan bulat).

% s

String karakter.

% x,% X

Nomor heksadesimal unsigned (integer). Format % X menggunakan ABCDEF bukan abcdef .

%%

Satu karakter % ; tidak ada argumen yang diubah.

Opsional, parameter tambahan mungkin berada di antara % dan huruf kontrol:

hitung $

Gunakan argumen count 'pada titik ini dalam format. Ini disebut sebagai penentu posisi dan dimaksudkan terutama untuk digunakan dalam versi terjemahan dari string format, bukan dalam teks asli program AWK. Ini adalah ekstensi gawk .

-

Ekspresi harus dibenarkan di dalam bidangnya.

ruang

Untuk konversi numerik, awali nilai positif dengan spasi, dan nilai negatif dengan tanda minus.

+

Tanda tambah, digunakan sebelum pengubah lebar (lihat di bawah), mengatakan untuk selalu menyediakan tanda untuk konversi numerik, bahkan jika data yang akan diformat adalah positif. + Menimpa pengubah ruang.

#

Gunakan `` bentuk alternatif '' untuk surat kontrol tertentu. Untuk % o , berikan nol di awal. Untuk % x , dan % X , berikan 0x atau 0X terkemuka untuk hasil bukan nol. Untuk % e , % E , dan % f , hasilnya selalu mengandung titik desimal. Untuk % g , dan % G , nol trailing tidak dihapus dari hasilnya.

0

0 (nol) terkemuka bertindak sebagai bendera, yang menunjukkan output harus diisi dengan nol sebagai ganti spasi. Ini berlaku bahkan untuk format output non-numerik. Bendera ini hanya memiliki efek ketika lebar bidang lebih lebar dari nilai yang akan dicetak.

lebar

Lapangan harus empuk ke lebar ini. Bidang ini biasanya diisi dengan spasi. Jika bendera 0 telah digunakan, maka akan diisi dengan nol.

. prec

Angka yang menentukan presisi yang akan digunakan saat mencetak. Untuk format % e , % E , dan % f , ini menentukan jumlah digit yang ingin Anda cetak di sebelah kanan koma desimal. Untuk % g , dan % G format, itu menentukan jumlah digit signifikan maksimum. Untuk format % d , % o , % i , % u , % x , dan % X , ini menentukan jumlah digit minimum untuk dicetak. Untuk % s , itu menentukan jumlah karakter maksimum dari string yang harus dicetak.

Lebar dinamis dan kemampuan prec dari rutinitas ANSI C printf () didukung. A * di tempat baik lebar atau spesifikasi prec menyebabkan nilai-nilai mereka harus diambil dari daftar argumen untuk printf atau sprintf () . Untuk menggunakan penentu posisi dengan lebar atau presisi yang dinamis, berikan hitungan $ setelah * dalam string format. Misalnya, "% 3 $ * 2 $. * 1 $ s" .

Nama File Khusus

Ketika melakukan I / O redirection baik dari cetak atau printf ke file, atau melalui getline dari file, gawk mengenali nama file khusus tertentu secara internal. Nama file ini memungkinkan akses untuk membuka file deskriptor yang diwarisi dari proses induk gawk (biasanya shell). Nama-nama file ini juga dapat digunakan pada baris perintah untuk menamai file data. Nama file adalah:

/ dev / stdin

Masukan standar.

/ dev / stdout

Output standar.

/ dev / stderr

Output kesalahan standar.

/ dev / fd / n

File yang terkait dengan deskriptor file terbuka n .

Ini sangat berguna untuk pesan kesalahan. Sebagai contoh:

cetak "Kamu gagal!" > "/ dev / stderr"

padahal seharusnya Anda harus menggunakannya

cetak "Kamu gagal!" | "kucing 1> & 2"

Nama file khusus berikut dapat digunakan dengan operator | & co-process untuk membuat koneksi jaringan TCP / IP.

/ inet / tcp / lport / rhost / rport

File untuk koneksi TCP / IP pada port port lokal ke rhost host jarak jauh pada rport port jarak jauh. Gunakan port 0 untuk meminta sistem memilih port.

/ inet / udp / lport / rhost / rport

Serupa, tetapi gunakan UDP / IP bukan TCP / IP.

/ inet / raw / lport / rhost / rport

Dicadangkan untuk penggunaan di masa mendatang.

Nama file khusus lainnya menyediakan akses ke informasi tentang proses gawk yang berjalan. Nama file ini sekarang sudah usang. Gunakan array PROCINFO untuk mendapatkan informasi yang mereka berikan. Nama file adalah:

/ dev / pid

Membaca file ini mengembalikan ID proses dari proses saat ini, dalam desimal, diakhiri dengan baris baru.

/ dev / ppid

Membaca file ini mengembalikan ID proses induk dari proses saat ini, dalam desimal, diakhiri dengan baris baru.

/ dev / pgrpid

Membaca file ini mengembalikan ID grup proses dari proses saat ini, dalam desimal, diakhiri dengan baris baru.

/ dev / pengguna

Membaca file ini mengembalikan satu catatan yang diakhiri dengan baris baru. Kolom dipisahkan dengan spasi. $ 1 adalah nilai dari getuid (2) system call, $ 2 adalah nilai dari geteuid (2) system call, $ 3 adalah nilai dari getgid (2) system call, dan $ 4 adalah nilai dari getegid (2) panggilan sistem. Jika ada bidang tambahan, mereka adalah ID grup yang dikembalikan oleh getgroup (2). Beberapa grup mungkin tidak didukung di semua sistem.

Fungsi Numerik

AWK memiliki fungsi aritmatika bawaan berikut:

atan2 ( y , x )

Mengembalikan arctangent dari y / x dalam radian.

cos ( expr )

Mengembalikan kosinus expr , yang dalam radian.

exp ( expr )

Fungsi eksponensial.

int ( expr )

Memotong menjadi bilangan bulat.

log ( expr )

Fungsi logaritma natural.

rand ()

Mengembalikan nomor acak antara 0 dan 1.

sin ( expr )

Mengembalikan sinus expr , yang dalam radian.

sqrt ( expr )

Fungsi akar kuadrat.

srand ( [ expr ] )

Menggunakan expr sebagai benih baru untuk pembuat nomor acak. Jika tidak ada expr disediakan, waktu hari digunakan. Nilai kembalian adalah benih sebelumnya untuk pembuat nomor acak.

Fungsi String

Gawk memiliki fungsi string built-in berikut:

asort ( s [ , d ] )

Mengembalikan jumlah elemen dalam larik sumber s . Isi dari s diurutkan menggunakan aturan normal gawk untuk membandingkan nilai, dan indeks dari nilai yang diurutkan s diganti dengan bilangan bulat berurutan dimulai dengan 1. Jika array tujuan opsional d ditentukan, maka s pertama digandakan menjadi , dan kemudian d diurutkan, meninggalkan indeks dari array sumber tidak berubah.

gensub ( r , s , h [ , t ] )

Cari string target t untuk pertandingan dari ekspresi reguler r . Jika h adalah string yang dimulai dengan g atau G , maka ganti semua pertandingan r dengan s . Jika tidak, h adalah angka yang menunjukkan yang cocok dengan r untuk menggantikan. Jika t tidak disediakan, $ 0 digunakan sebagai gantinya. Dalam teks pengganti s , urutan \ n , di mana n adalah digit dari 1 hingga 9, dapat digunakan untuk menunjukkan hanya teks yang cocok dengan subekspresi yang ditandai. Urutan \ 0 mewakili seluruh teks yang cocok, seperti halnya karakter & . Tidak seperti sub () dan gsub () , string yang dimodifikasi dikembalikan sebagai hasil dari fungsi, dan string target asli tidak diubah.

gsub ( r , s [ , t ] )

Untuk setiap substring yang cocok dengan ekspresi reguler r dalam string t , gantikan string s , dan kembalikan jumlah substitusi. Jika t tidak disediakan, gunakan $ 0 . An & dalam teks pengganti diganti dengan teks yang benar-benar cocok. Gunakan \ & untuk mendapatkan & literal. (Ini harus diketik sebagai "\\ &" ; lihat GAWK: Pemrograman AWK yang Efektif untuk diskusi yang lebih lengkap tentang aturan untuk & dan backslash dalam teks penggantian sub () , gsub () , dan gensub () .)

indeks ( s , t )

Mengembalikan indeks t string dalam string s , atau 0 jika t tidak ada. (Ini menyiratkan bahwa indeks karakter mulai dari satu.)

panjang ( [ s ] )

Mengembalikan panjang string s , atau panjang $ 0 jika tidak disediakan.

cocok ( s , r [ , a ] )

Mengembalikan posisi di mana ekspresi reguler r terjadi, atau 0 jika r tidak ada, dan menetapkan nilai RSTART dan RLENGTH . Perhatikan bahwa urutan argumen sama seperti untuk operator ~ : str ~ re . Jika array a disediakan, a dibersihkan dan kemudian elemen 1 sampai n diisi dengan bagian-bagian s yang cocok dengan subekspresi yang ditandai dalam r . Elemen 0'th berisi bagian yang dicocokkan dengan seluruh ekspresi reguler r .

split ( s , a [ , r ] )

Membagi string s ke dalam array a pada ekspresi reguler r , dan mengembalikan jumlah bidang. Jika r dihilangkan, FS digunakan sebagai gantinya. Array a dibersihkan terlebih dahulu. Pemisahan berperilaku identik dengan pemisahan bidang, dijelaskan di atas.

sprintf ( fmt , expr-list )

Mencetak daftar expr berdasarkan fmt , dan mengembalikan string yang dihasilkan.

strtonum ( str )

Memeriksa str , dan mengembalikan nilai numeriknya. Jika str dimulai dengan 0 terkemuka, strtonum () mengasumsikan bahwa str adalah bilangan oktal. Jika str dimulai dengan 0x atau 0X , strtonum () mengasumsikan bahwa str adalah angka heksadesimal.

sub ( r , s [ , t ] )

Sama seperti gsub () , tetapi hanya substring pencocokan pertama yang diganti.

substr ( s , i [ , n ] )

Mengembalikan paling banyak substring n- karakter mulai dari i . Jika n dihilangkan, sisa s digunakan.

tolower ( str )

Mengembalikan salinan string str , dengan semua karakter huruf besar di bagian yang diterjemahkan ke pasangan huruf kecilnya yang sesuai. Karakter non-abjad tidak berubah.

toupper ( str )

Mengembalikan salinan string str , dengan semua karakter huruf kecil di bagian yang diterjemahkan ke pasangan huruf besar yang sesuai. Karakter non-abjad tidak berubah.

Fungsi Waktu

Karena salah satu penggunaan utama program AWK adalah memproses file log yang berisi informasi cap waktu, gawk menyediakan fungsi-fungsi berikut untuk mendapatkan stempel waktu dan memformatnya.

mktime ( datespec )

Rurns datespec menjadi stempel waktu dari bentuk yang sama seperti yang dikembalikan oleh systime () . Datepec adalah string dari bentuk YYYY MM DD HH MM SS [DST] . Isi string adalah enam atau tujuh angka yang mewakili masing-masing satu tahun penuh termasuk abad, bulan dari 1 hingga 12, hari bulan dari 1 hingga 31, jam hari dari 0 hingga 23, menit dari 0 hingga 59, dan yang kedua dari 0 hingga 60, dan bendera daylight saving opsional. Nilai-nilai dari angka-angka ini tidak perlu dalam rentang yang ditentukan; misalnya, satu jam -1 berarti 1 jam sebelum tengah malam. Kalender Gregorian awal-nol diasumsikan, dengan tahun 0 sebelum tahun 1 dan tahun -1 sebelum tahun ke-0. Waktu diasumsikan berada di zona waktu lokal. Jika bendera daylight saving positif, waktu diasumsikan sebagai daylight saving time; jika nol, waktu diasumsikan sebagai waktu standar; dan jika negatif (standar), mktime () mencoba untuk menentukan apakah waktu musim panas berlaku untuk waktu yang ditentukan. Jika datespec tidak mengandung cukup elemen atau jika waktu yang dihasilkan di luar jangkauan, mktime () mengembalikan -1.

strftime ( [ format [ , timestamp ]] )

Format cap waktu sesuai dengan spesifikasi dalam format. Stempel waktu harus dalam bentuk yang sama seperti yang dikembalikan oleh systime () . Jika stempel waktu hilang, waktu saat ini digunakan. Jika format tidak ada, format standar yang setara dengan output tanggal (1) digunakan. Lihat spesifikasi untuk fungsi strftime () dalam ANSI C untuk konversi format yang dijamin akan tersedia. Sebuah versi publik-domain strftime (3) dan halaman manual untuk itu datang dengan melongo ; jika versi itu digunakan untuk membuat gawk , maka semua konversi yang dijelaskan di halaman manual itu tersedia untuk melongo.

systime ()

Mengembalikan waktu saat ini sebagai jumlah detik sejak Epoch (1970-01-01 00:00:00 UTC pada sistem POSIX).

Fungsi Manipulasi Bit

Dimulai dengan versi 3.1 dari gawk , fungsi manipulasi bit berikut ini tersedia. Mereka bekerja dengan mengkonversi nilai floating point presisi ganda ke unsigned long integer, melakukan operasi, dan kemudian mengkonversi hasilnya kembali ke floating point. Fungsi-fungsinya adalah:

dan ( v1 , v2 )

Kembalikan bitwise DAN dari nilai-nilai yang disediakan oleh v1 dan v2 .

compl ( val )

Kembalikan komplemen bitwise dari val .

pemindahan gigi ( val , count )

Kembalikan nilai val , bergeser ke kiri oleh bit hitungan .

atau ( v1 , v2 )

Kembalikan bitwise ATAU dari nilai-nilai yang disediakan oleh v1 dan v2 .

rshift ( val , menghitung )

Kembalikan nilai val , bergeser ke kanan dengan bit hitungan .

xor ( v1 , v2 )

Kembalikan bitwise XOR dari nilai-nilai yang disediakan oleh v1 dan v2 .

Fungsi Internasionalisasi

Dimulai dengan versi 3.1 dari gawk , fungsi-fungsi berikut dapat digunakan dari dalam program AWK Anda untuk menerjemahkan string pada saat run-time. Untuk perincian lengkap, lihat GAWK: Pemrograman AWK Efektif .

bindtextdomain ( direktori [ , domain ] )

Menentukan direktori di mana gawk mencari file .mo , jika mereka tidak atau tidak dapat ditempatkan di lokasi `` standar '' (misalnya selama pengujian). Ini mengembalikan direktori di mana domain adalah `` terikat. ''

Domain default adalah nilai TEXTDOMAIN . Jika direktori adalah string null ( "" ), maka bindtextdomain () mengembalikan pengikatan saat ini untuk domain yang diberikan.

dcgettext ( string [ , domain [ , kategori ]] )

Mengembalikan terjemahan string dalam domain domain teks untuk kategori kategori lokal. Nilai default untuk domain adalah nilai TEXTDOMAIN saat ini . Nilai default untuk kategori adalah "LC_MESSAGES" .

Jika Anda memberikan nilai untuk kategori , itu harus berupa string yang sama dengan salah satu kategori lokal yang dikenal yang dijelaskan dalam GAWK: Pemrograman AWK Efektif . Anda juga harus menyediakan domain teks. Gunakan TEXTDOMAIN jika Anda ingin menggunakan domain saat ini.

dcngettext ( string1 , string2 , number [ , domain [ , kategori ]] )

Mengembalikan formulir jamak yang digunakan untuk jumlah terjemahan string1 dan string2 dalam domain domain teks untuk kategori kategori lokal. Nilai default untuk domain adalah nilai TEXTDOMAIN saat ini . Nilai default untuk kategori adalah "LC_MESSAGES" .

Jika Anda memberikan nilai untuk kategori , itu harus berupa string yang sama dengan salah satu kategori lokal yang dikenal yang dijelaskan dalam GAWK: Pemrograman AWK Efektif . Anda juga harus menyediakan domain teks. Gunakan TEXTDOMAIN jika Anda ingin menggunakan domain saat ini.

FUNGSI PENGGUNA DINYATAKAN

Fungsi dalam AWK didefinisikan sebagai berikut:

nama fungsi ( daftar parameter ) { pernyataan }

Fungsi dieksekusi ketika dipanggil dari dalam ekspresi dalam pola atau tindakan. Parameter aktual yang disediakan dalam pemanggilan fungsi digunakan untuk memberi contoh parameter formal yang dinyatakan dalam fungsi. Array dilewatkan oleh referensi, variabel lain dilewatkan oleh nilai.

Karena fungsi awalnya bukan bagian dari bahasa AWK, ketentuan untuk variabel lokal agak kikuk: Mereka dinyatakan sebagai parameter tambahan dalam daftar parameter. Konvensi ini untuk memisahkan variabel lokal dari parameter nyata dengan spasi ekstra dalam daftar parameter. Sebagai contoh:

fungsi f (p, q, a, b) # a dan b bersifat lokal {...} / abc / {...; f (1, 2); ...}

Tanda kurung kiri dalam pemanggilan fungsi diperlukan untuk segera mengikuti nama fungsi, tanpa spasi putih. Ini untuk menghindari ambiguitas sintaksis dengan operator penggabungan. Pembatasan ini tidak berlaku untuk fungsi-fungsi bawaan yang tercantum di atas.

Fungsi dapat memanggil satu sama lain dan mungkin rekursif. Parameter fungsi yang digunakan sebagai variabel lokal diinisialisasi ke string nol dan angka nol saat pemanggilan fungsi.

Gunakan expr kembali untuk mengembalikan nilai dari suatu fungsi. Nilai kembalian tidak terdefinisi jika tidak ada nilai yang diberikan, atau jika fungsi kembali dengan `` jatuh '' akhir.

Jika --lint telah disediakan, gawk memperingatkan tentang panggilan ke fungsi tidak terdefinisi pada waktu parse, bukan pada waktu berjalan. Memanggil fungsi yang tidak terdefinisi pada saat run time adalah kesalahan fatal.

Kata func dapat digunakan sebagai pengganti fungsi .

FUNGSI FUNGSI SECARA DINAMISAL

Dimulai dengan versi 3.1 dari gawk , Anda dapat secara dinamis menambahkan fungsi-fungsi built-in baru ke interpreter gawk yang sedang berjalan. Detail lengkapnya berada di luar cakupan halaman buku panduan ini; lihat GAWK: Pemrograman AWK Efektif untuk detailnya.

ekstensi ( objek , fungsi )

Secara dinamis menautkan file objek bersama yang dinamai objek , dan menjalankan fungsi dalam objek itu, untuk melakukan inisialisasi. Ini harus disediakan sebagai string. Mengembalikan nilai yang dikembalikan oleh fungsi .

Fungsi ini disediakan dan didokumentasikan dalam GAWK: Pemrograman AWK yang Efektif , tetapi segala sesuatu tentang fitur ini kemungkinan akan berubah pada rilis berikutnya. Kami SANGAT menyarankan agar Anda tidak menggunakan fitur ini untuk apa pun yang tidak ingin Anda ulangi.

SIGNAL

pgawk menerima dua sinyal. SIGUSR1 menyebabkannya membuang profil dan memanggil tumpukan fungsi ke file profil, yang entah awkprof.out , atau file apa pun yang dinamai dengan opsi --profile . Kemudian terus berjalan. SIGHUP menyebabkannya membuang profil dan memanggil tumpukan panggilan dan kemudian keluar.

CONTOH

Cetak dan urutkan nama login semua pengguna: BEGIN {FS = ":"} {cetak $ 1 | "sort"} Hitung garis dalam file: {nlines ++} END {print nlines} Awali setiap baris dengan nomornya dalam file: {print FNR, $ 0} Penggabungan dan nomor baris (variasi pada tema): {print NR, $ 0}

Internalisasi

String konstanta adalah urutan karakter yang diapit oleh tanda kutip ganda. Di lingkungan yang tidak berbahasa Inggris, adalah mungkin untuk menandai string dalam program AWK karena membutuhkan terjemahan ke bahasa alami asli. String tersebut ditandai dalam program AWK dengan garis bawah terkemuka (`` _ ''). Sebagai contoh,

gawk 'BEGIN {print "hello, world"}'

selalu mencetak halo, dunia . Tapi,

gawk 'BEGIN {print _ "hello, world"}'

mungkin mencetak bonjour, monde di Prancis.

Ada beberapa langkah yang terlibat dalam memproduksi dan menjalankan program AWK yang dapat dilokalkan.

1

Tambahkan tindakan BEGIN untuk menetapkan nilai ke variabel TEXTDOMAIN untuk menyetel domain teks ke nama yang dikaitkan dengan program Anda.


BEGIN {TEXTDOMAIN = "myprog"}

Ini memungkinkan Anda untuk menemukan file .mo yang terkait dengan program Anda. Tanpa langkah ini, Gawk menggunakan domain teks pesan , yang kemungkinan tidak mengandung terjemahan untuk program Anda.

2

Tandai semua string yang harus diterjemahkan dengan garis bawah yang menonjol.

3

Jika perlu, gunakan fungsi dcgettext () dan / atau bindtextdomain () di program Anda, jika perlu.

4.

Jalankan gawk --gen-po -f myprog.awk> myprog.po untuk menghasilkan file .po untuk program Anda.

5.

Berikan terjemahan yang sesuai, dan buat dan pasang file .mo yang sesuai.

Fitur-fitur internasionalisasi dijelaskan secara lengkap di GAWK: Pemrograman AWK yang Efektif .

Kompatibilitas Posix

Tujuan utama untuk gawk adalah kompatibilitas dengan standar POSIX, serta dengan versi terbaru UNIX awk . Untuk tujuan ini, gawk menggabungkan fitur yang terlihat pengguna berikut yang tidak dijelaskan dalam buku AWK, tetapi merupakan bagian dari versi Bell Laboratories dari awk , dan berada dalam standar POSIX.

Buku ini menunjukkan bahwa penugasan variabel baris perintah terjadi ketika awk sebaliknya akan membuka argumen sebagai file, yang setelah blok BEGIN dijalankan. Namun, dalam implementasi sebelumnya, ketika tugas seperti itu muncul sebelum nama file apa pun, penugasan akan terjadi sebelum blok BEGIN dijalankan. Aplikasi datang untuk bergantung pada fitur `` ini. '' Ketika awk diubah agar sesuai dengan dokumentasinya, opsi -v untuk menetapkan variabel sebelum eksekusi program ditambahkan untuk mengakomodasi aplikasi yang bergantung pada perilaku lama. (Fitur ini disetujui oleh kedua Bell Laboratories dan pengembang GNU.)

Opsi- W untuk fitur spesifik implementasi adalah dari standar POSIX.

Saat memproses argumen, Gawk menggunakan opsi khusus `` - '' untuk menandai akhir argumen. Dalam mode kompatibilitas, ia memperingatkan tentang tetapi sebaliknya mengabaikan opsi yang tidak terdefinisi. Dalam operasi normal, argumen tersebut diteruskan ke program AWK untuk diproses.

Buku AWK tidak mendefinisikan nilai kembalian dari srand () . Standar POSIX mengembalikannya benih yang digunakan, untuk memungkinkan melacak urutan nomor acak. Oleh karena itu srand () dalam gawk juga mengembalikan benihnya saat ini.

Fitur baru lainnya adalah: Penggunaan beberapa opsi -f (dari MKS awk ); array ENVIRON ; urutan pelepasan \ a , dan \ v (dilakukan awalnya dalam gawk dan dimasukkan kembali ke versi Bell Laboratories); fungsi tolower () dan toupper () (dari versi Bell Laboratories); dan spesifikasi konversi ANSI C di printf (dilakukan pertama kali dalam versi Bell Laboratories).

Fitur Historis

Ada dua fitur implementasi AWK historis yang didukung gawk . Pertama, dimungkinkan untuk memanggil fungsi yang panjang () tidak hanya tanpa argumen, tetapi bahkan tanpa tanda kurung! Demikian,

a = length # Holy Algol 60, Batman!

sama dengan salah satunya

a = panjang ()
a = panjang ($ 0)

Fitur ini ditandai sebagai "usang" dalam standar POSIX, dan gawk mengeluarkan peringatan tentang penggunaannya jika --internet ditentukan pada baris perintah.

Fitur lainnya adalah penggunaan baik pernyataan melanjutkan atau istirahat di luar tubuh sementara , untuk , atau melakukan loop. Implementasi AWK tradisional telah memperlakukan penggunaan seperti itu setara dengan pernyataan berikutnya . Gawk mendukung penggunaan ini jika --traditional telah ditentukan.

Ekstensi GNU

Gawk memiliki sejumlah ekstensi ke POSIX awk . Mereka dijelaskan dalam bagian ini. Semua ekstensi yang dideskripsikan di sini dapat dinonaktifkan dengan mengaktifkan gawk dengan opsi --traditional .

Fitur-fitur berikut dari gawk tidak tersedia di POSIX awk .

*

Tidak ada pencarian jalan dilakukan untuk file yang bernama melalui opsi -f . Oleh karena itu variabel lingkungan AWKPATH tidak istimewa.

*

Urutan escape \ x . (Dinonaktifkan dengan --posix .)

*

Fungsi fflush () . (Dinonaktifkan dengan --posix .)

*

Kemampuan untuk melanjutkan garis setelahnya ? dan :. (Dinonaktifkan dengan --posix .)

*

Konstanta oktal dan heksadesimal dalam program AWK.

*

Variabel ARGIND , BINMODE , ERRNO , LINT , RT dan TEXTDOMAIN tidak khusus.

*

Variabel IGNORECASE dan efek sampingnya tidak tersedia.

*

FIELDWIDTHS variabel dan pembagian bidang lebar tetap.

*

Array PROCINFO tidak tersedia.

*

Penggunaan RS sebagai ekspresi reguler.

*

Nama file khusus yang tersedia untuk I / O redirection tidak dikenali.

*

Operator | & operator untuk membuat proses bersama.

*

Kemampuan untuk membagi karakter individu menggunakan string null sebagai nilai FS , dan sebagai argumen ketiga untuk membagi () .

*

Argumen kedua opsional untuk fungsi close () .

*

Argumen ketiga opsional untuk fungsi match () .

*

Kemampuan untuk menggunakan penspesifikasi posisi dengan printf dan sprintf () .

*

Penggunaan delete array untuk menghapus seluruh isi array.

*

Penggunaan nextfile untuk meninggalkan pemrosesan file input saat ini.

*

Dan () , asort () , bindtextdomain () , compl () , dcgettext () , gensub () , lshift () , mktime () , atau () , rshift () , strftime () , strtonum () , systime () dan xor () berfungsi.

*

String yang dapat dilokalkan.

*

Menambahkan fungsi built-in baru secara dinamis dengan fungsi ekstensi () .

Buku AWK tidak mendefinisikan nilai kembalian dari fungsi close () . Gawk 's close () mengembalikan nilai dari fclose (3), atau pclose (3), ketika menutup file output atau pipa, masing-masing. Ini mengembalikan status keluar proses ketika menutup pipa input. Nilai kembalian adalah -1 jika file yang bernama, pipa atau co-proses tidak dibuka dengan pengalihan.

Ketika gawk dipanggil dengan opsi --traditional , jika argumen fs ke opsi -F adalah `` t '', maka FS diatur ke tab karakter. Perhatikan bahwa mengetik gawk -F \ t ... hanya menyebabkan shell untuk mengutip `` t, '', dan tidak meneruskan `` \ t '' ke opsi -F . Karena ini adalah kasus khusus yang agak buruk, itu bukan perilaku default. Perilaku ini juga tidak terjadi jika --posix telah ditentukan. Untuk benar-benar mendapatkan karakter tab sebagai pemisah bidang, sebaiknya gunakan tanda kutip tunggal: gawk -F '\ t' ....

Lihat perintah lain : tunggu , lp , selesaikan , execv , getfacl , ioctl , uniq , rmmod , pvcreate , rsh , unix2dos , kal , fs , cd , iwpriv , swapon , autofs , talk , motd , gratis , lpr , execl , fdisk , pada , siapa , iwconfig , ifconfig , vgdisplay , open , lsmod , ntohs , mailq , kill , wtmp