Skip to main content

Gawk - Perintah Linux - Perintah Unix

Pemrograman Bash Dasar pada Linux (Juni 2026)

Pemrograman Bash Dasar pada Linux (Juni 2026)
Anonim

Nama

gawk - pemindaian pola dan bahasa pemrosesan

Ringkasan

melongo Pilihan gaya POSIX atau GNU -f berkas program -- file …melongo Pilihan gaya POSIX atau GNU -- teks program file …

pgawk Pilihan gaya POSIX atau GNU -f berkas program -- file …pgawk Pilihan gaya POSIX atau GNU -- teks program file …

Deskripsi

Melongo adalah implementasi Program 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 di Bahasa Pemrograman AWK , oleh Aho, Kernighan, dan Weinberger, dengan fitur tambahan yang ditemukan di versi Sistem V Release 4 UNIX awk . Melongo juga menyediakan Bell Laboratories yang lebih baru awk ekstensi, dan sejumlah ekstensi khusus GNU.

Pgawk adalah versi pembuatan dari melongo . Ini identik dalam segala hal melongo , kecuali program yang berjalan lebih lambat, dan secara otomatis menghasilkan profil eksekusi dalam file awkprof.out ketika selesai. Lihat --Profil pilihan, di bawah ini.

Baris perintah terdiri dari opsi untuk melongo itu sendiri, teks program AWK (jika tidak disediakan melalui -f atau --mengajukan opsi), dan nilai yang akan tersedia di ARGC dan ARGV Variabel AWK yang telah ditentukan sebelumnya.

Format Opsi

Melongo Pilihan 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, melongo -pilihan spesifik disediakan melalui argumen ke -W pilihan. Banyak -W pilihan dapat diberikan masing-masing -W opsi memiliki opsi panjang yang sesuai, seperti yang dijelaskan di bawah ini. Argumen untuk opsi panjang dapat digabungkan dengan opsi oleh = menandatangani, tanpa spasi, atau mereka mungkin diberikan dalam argumen baris perintah berikutnya. Opsi panjang dapat disingkat, asalkan singkatannya tetap unik.

Pilihan

Melongo menerima opsi berikut, dicantumkan menurut abjad.

-F fs

--field-separator fs Menggunakan fs untuk pemisah bidang input (nilai dari FS variabel yang telah ditentukan).

-v var = val

--menetapkan var = val Tentukan nilainya val ke variabel var , sebelum pelaksanaan program dimulai. Nilai variabel tersebut tersedia untuk MULAI blok program AWK.

-f berkas program

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

-mf NNN

-Bapak NNN Atur berbagai batas memori ke nilai NNN . Itu f flag mengatur jumlah field maksimum, dan r bendera mengatur ukuran catatan maksimum. Dua bendera ini dan -m opsinya adalah dari versi penelitian Bell Laboratories dari UNIX awk . Mereka diabaikan oleh melongo , sejak melongo tidak memiliki batas yang ditentukan sebelumnya.

-W compat

-W tradisional

--compat

--tradisional Jalankan di kesesuaian mode. Dalam mode kompatibilitas, melongo berperilaku identik dengan UNIX awk ; tidak ada satu pun ekstensi khusus GNU yang diakui. Penggunaan --tradisional lebih disukai daripada bentuk lain dari opsi ini. Lihat EKSTENSI GNU, di bawah, untuk informasi lebih lanjut.

-W copyleft

-W hak cipta

--copyleft

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

-W-variabel dump= mengajukan

--dump-variabel= mengajukan Cetak daftar variabel global yang diurutkan, jenis dan nilai akhirnya mengajukan . Jika tidak mengajukan disediakan, melongo 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 saya, j, dan seterusnya.)

Bantuan -W

-W penggunaan

--membantu

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

-W lint= fatal

--lint= fatal Berikan 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

- tua Berikan peringatan tentang konstruksi yang tidak portabel ke versi asli Unix awk .

-W gen-po

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

-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 menyala kesesuaian mode, dengan batasan tambahan berikut:

*

x escape sequence tidak dikenali.

*

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

*

Anda tidak dapat melanjutkan baris berikutnya ? dan :.

*

Sinonimnya func untuk kata kunci fungsi tidak diakui.

*

Operator ** dan **= tidak dapat digunakan sebagai pengganti ^ dan ^=.

*

Itu fflush () fungsi tidak tersedia.

-W profil= prof_file

--Profil= prof_file Kirim data profil ke prof_file . Standarnya adalah awkprof.out. Saat dijalankan melongo , profilnya hanyalah versi "cukup tercetak" dari program ini. Saat dijalankan pgawk , profil berisi jumlah eksekusi 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 Ekspresi Reguler, di bawah). Ekspresi interval tidak tersedia secara tradisional dalam bahasa AWK. Standar POSIX menambahkannya, untuk membuatnya awk dan egrep konsisten satu sama lain. Namun, penggunaannya cenderung merusak program AWK lama, jadi melongo hanya memberikannya jika diminta dengan opsi ini, atau kapan --posix ditentukan.

Sumber -W teks program

--sumber teks program Menggunakan teks program sebagai kode sumber program AWK. Opsi ini memungkinkan pencampuran fungsi pustaka yang mudah (digunakan melalui -f dan --mengajukan opsi) 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 Cetak informasi versi untuk salinan khusus ini melongo pada output standar. Ini berguna terutama untuk mengetahui apakah salinan saat ini melongo pada sistem Anda adalah yang terbaru sehubungan dengan apa pun yang didistribusikan oleh Yayasan Perangkat Lunak Gratis. Ini juga berguna saat melaporkan bug. (Per Standar Pengkodean GNU , opsi ini menyebabkan jalan keluar yang cepat 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 di ARGV array 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 }fungsi nama ( daftar parameter ) { pernyataan }

Melongo pertama membaca sumber program dari berkas program (s) jika ditentukan, dari argumen ke --sumber, atau dari argumen non-opsi pertama pada baris perintah. Itu -f dan --sumber pilihan dapat digunakan beberapa kali pada baris perintah. Melongo membaca teks program seolah-olah semua berkas program dan teks sumber 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 -f pilihan. Jika variabel ini tidak ada, jalur default adalah".: / usr / local / share / awk". (Direktori sebenarnya dapat bervariasi, tergantung pada caranya melongo dibangun dan dipasang.) Jika nama file diberikan kepada -f option berisi karakter `` / '', tidak ada pencarian path yang dilakukan.

Melongo menjalankan program AWK dengan urutan berikut. Pertama, semua tugas variabel yang ditentukan melalui -v opsi dilakukan. Berikutnya, melongo mengkompilasi program ke dalam bentuk internal. Kemudian, melongo mengeksekusi kode dalam MULAI block (s) (jika ada), dan kemudian mulai membaca setiap file yang bernama di ARGV larik. Jika tidak ada file yang disebutkan di baris perintah, melongo membaca input standar.

Jika nama file pada baris perintah memiliki formulir var = val itu diperlakukan sebagai tugas variabel. Variabel var akan diberi nilai val . (Ini terjadi setelah apa pun MULAI block (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 dari elemen tertentu ARGV kosong (''), melongo melompati itu.

Untuk setiap catatan dalam masukan, melongo tes untuk melihat apakah itu cocok pola dalam program AWK. Untuk setiap pola yang cocok dengan catatan, yang terkait tindakan dieksekusi. Pola diuji dalam urutan yang terjadi dalam program.

Akhirnya, setelah semua masukan habis, melongo mengeksekusi kode dalam AKHIR block (s) (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 variabel bawaan RS. Jika RS adalah karakter tunggal, karakter yang memisahkan catatan. 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, kemudian rekaman dipisahkan oleh garis kosong. Kapan RS diatur ke string null, karakter baris baru selalu bertindak sebagai pemisah bidang, di samping nilai apa pun FS mungkin.

Fields

Karena setiap catatan masukan dibaca, melongo membagi catatan ke dalam ladang , menggunakan nilai dari FS variabel sebagai pemisah bidang. 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 itu FS adalah ruang tunggal, bidang dipisahkan oleh run of spaces dan / atau tab dan / atau baris baru. (Tapi lihat pembahasannya --posix, di bawah). CATATAN: Nilai dari IGNORECASE (lihat di bawah) juga mempengaruhi bagaimana pembagian bidang saat FS adalah ekspresi reguler, dan bagaimana rekaman dipisahkan kapan RS adalah ekspresi reguler.

Jika itu FIELDWIDTHS variabel diatur ke daftar nomor yang dipisahkan spasi, setiap bidang diharapkan memiliki lebar tetap, dan melongo membagi catatan menggunakan lebar yang ditentukan. Nilai dari FS diabaikan. Menetapkan nilai baru ke 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 = 5cetak $ 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, menugaskan ke bidang yang tidak ada (mis., $ (NF + 2) = 5) meningkatkan nilai NF, membuat bidang intervensi dengan string null sebagai nilainya, dan menyebabkan nilai $0 untuk dikomputasi ulang, dengan bidang yang dipisahkan oleh nilai OFS. Referensi ke kolom bernomor negatif menyebabkan kesalahan fatal. Decrementing NF menyebabkan nilai bidang melewati nilai baru yang hilang, dan nilai $0 untuk dikomputasi ulang, dengan bidang yang dipisahkan oleh nilai OFS.

Menetapkan nilai ke bidang yang sudah ada menyebabkan seluruh catatan akan dibangun kembali saat $0 direferensikan. Demikian pula, menetapkan nilai ke $0 menyebabkan record akan di-resplit, menciptakan nilai baru untuk field.

Variabel Built-in

Melongo Variabel bawaan adalah:

ARGC

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

ARGIND

Indeks dalam ARGV file saat ini sedang diproses.

ARGV

Larik argumen baris perintah. Array ini diindeks dari 0 hingga 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 dari "r", atau "w" tentukan bahwa file input, atau file output, masing-masing, harus menggunakan I / O biner. Nilai string dari "rw" atau "wr" tentukan 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 variabel itu (misalnya,ENVIRON "HOME" mungkin / home / arnold). Mengubah array ini tidak mempengaruhi lingkungan yang terlihat oleh program-program yang melongo memunculkan melalui redirection atau sistem()fungsi.

ERRNO

Jika kesalahan sistem terjadi baik melakukan pengalihan untuk getline, selama membaca untuk getline, atau selama dekat(), kemudian 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. Saat disetel, melongo mem-parsing input ke dalam bidang lebar tetap, daripada menggunakan nilai dari FS variabel sebagai pemisah bidang.

NAMA FILE

Nama file masukan saat ini.Jika tidak ada file yang ditentukan pada baris perintah, nilai dari NAMA FILE adalah `` - ''. Namun, NAMA FILE tidak terdefinisi di dalam MULAI blokir (kecuali disetel 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, kemudian perbandingan string dan pencocokan pola dalam aturan, pembagian bidang dengan FS, merekam memisahkan dengan RS, ekspresi reguler yang cocok dengan ~dan !~, dan gensub (), gsub (), indeks(), pertandingan(), membagi(), dan sub() fungsi built-in semuanya mengabaikan case ketika melakukan operasi ekspresi reguler. CATATAN: Subscription array adalah tidak terpengaruh, juga tidak asort () fungsi.

Jadi, jika IGNORECASE tidak sama dengan nol, / aB / cocok dengan semua string "ab", "aB","Ab", dan "AB". Seperti halnya semua variabel AWK, nilai awal dari IGNORECASE adalah nol, jadi 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

Menyediakan kontrol dinamis terhadap --lint pilihan dari dalam program AWK. Saat benar, melongo mencetak peringatan serat. Ketika salah, tidak. Ketika diberi nilai string "fatal", Peringatan serat menjadi kesalahan fatal, persis seperti --lint = 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, "grup 1" melalui "kelompok n ' untuk beberapa n , yang merupakan jumlah kelompok pelengkap yang dimiliki proses itu. Menggunakan di operator untuk menguji elemen-elemen ini. Unsur-unsur berikut dijamin akan tersedia:

PROCINFO "egid"

nilai dari getegid (2) panggilan sistem.

PROCINFO "euid"

nilai dari geteuid (2) panggilan sistem.

PROCINFO "FS"

"FS" jika bidang dibagi dengan FS berlaku, atau "FIELDWIDTHS" jika bidang dibagi dengan FIELDWIDTHS berlaku.

PROCINFO "gid"

nilai dari getgid (2) panggilan sistem.

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) panggilan sistem.

RS

Pemisah catatan input, secara default baris baru.

RT

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

RSTART

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

RLENGTH

Panjang tali cocok dengan pertandingan(); -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 berlangganan dengan ekspresi antara tanda kurung siku ( dan ). Jika ekspresi adalah daftar ekspresi ( expr , expr …) maka subscript array adalah string yang terdiri dari gabungan nilai (string) dari setiap ekspresi, dipisahkan oleh nilai dari SUBSEP variabel. Fasilitas ini digunakan untuk mensimulasikan larik berdimensi ganda. Sebagai contoh:

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

menugaskan string "Halo, dunia n" ke elemen array x yang diindeks oleh string"A 034B 034C". Semua larik dalam AWK bersifat asosiatif, yaitu diindeks oleh nilai string.

Operator khusus di dapat digunakan dalam jika atau sementara pernyataan 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.

Itu di konstruk juga dapat digunakan dalam untuk loop ke iterate atas semua elemen array.

Elemen dapat dihapus dari larik menggunakan menghapus pernyataan. Itu menghapus pernyataan juga dapat digunakan untuk menghapus seluruh konten dari suatu array, hanya dengan menentukan nama array tanpa subscript.

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 dapat dilakukan strtod (3). Sejumlah dikonversi menjadi string dengan menggunakan nilai CONVFMT sebagai string format untuk sprintf (3), dengan nilai numerik dari variabel sebagai argumen. Namun, meskipun semua angka di AWK adalah titik-mengambang, nilai integralnya adalah selalu dikonversi sebagai bilangan bulat. Dengan demikian, diberikan

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

variabel b memiliki nilai string '12' dan tidak '12.00'.

Melongo 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 tidak benar, dan melongo tidak melakukan ini. (Untungnya, ini diperbaiki dalam versi standar selanjutnya.)

Perhatikan bahwa konstanta string, seperti '57', adalah tidak string numerik, mereka adalah konstanta string. Ide `string numerik '' hanya berlaku untuk bidang, getline memasukkan, NAMA FILE, ARGV elemen, MENGEPUNG elemen dan elemen array yang dibuat oleh membagi() itu adalah string numerik. Ide dasarnya adalah itu masukan 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

Mulai dengan versi 3.1 dari ternganga, Anda dapat menggunakan konstanta oktal dan heksadesimal C-style dalam 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 rangkaian karakter yang dilampirkan di antara tanda kutip ganda ('). Dalam string, pasti escape sequence 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 hex

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 (melarikan diri).

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 spasi putih).

Dalam mode kompatibilitas, karakter yang direpresentasikan oleh urutan escape oktal dan heksadesimal diperlakukan secara harfiah ketika digunakan dalam konstanta ekspresi reguler. 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 dilampirkan 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 berakhiran ``, '', {, ?, :, &&, atau ||. Garis berakhiran melakukan atau lain juga memiliki pernyataan mereka secara otomatis melanjutkan pada baris berikut. 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:

MULAI AKHIR / ekspresi reguler / ekspresi relasional pola && pola pola || pola pola ? pola : pola ( pola ) ! pola pola1 , pola2

MULAI dan AKHIR ada dua jenis pola khusus yang tidak diuji terhadap input. Bagian aksi semua MULAI pola digabung seolah-olah semua pernyataan telah ditulis dalam satu MULAI blok. Mereka dieksekusi sebelum masukan apa pun dibaca. Demikian pula, semua AKHIR blok digabung, dan dieksekusi ketika semua input habis (atau ketika sebuah keluar pernyataan dieksekusi). MULAI dan AKHIR pola tidak dapat dikombinasikan dengan pola lain dalam ekspresi pola. MULAI dan AKHIR pola tidak boleh memiliki bagian tindakan yang hilang.

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

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

Itu &&, ||, 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.

Itu ?: 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 yang ketiga. Hanya satu dari pola kedua dan ketiga yang dievaluasi.

Itu pola1 , pola2 bentuk ekspresi disebut a pola jangkauan . Ini cocok semua catatan masukan dimulai dengan catatan yang cocok pola1 , dan berlanjut sampai rekaman yang cocok 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 garis 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 bergantinya: cocok juga r1 atau r2 .

r1r2

rentetan: pertandingan r1 , lalu r2 .

r +

cocok satu atau lebih r 's.

r *

cocok dengan nol atau lebih r 's.

r ?

cocok dengan nol atau satu r 's.

( r )

pengelompokan: kecocokan r .

r { n }

r { n ,}

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

Ekspresi interval hanya tersedia jika ada --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 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. (Sebuah ruang dapat dicetak, tetapi tidak terlihat, sementara sebuah Sebuah 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 di set karakter Anda.

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

Mengumpulkan Simbol

Simbol penyusun adalah elemen penyertaan multi-karakter yang disertakan . dan .. Misalnya, jika ch adalah elemen penyusun, lalu .ch. adalah ekspresi reguler yang cocok dengan elemen susun ini, sementara ch adalah ekspresi reguler yang cocok dengan keduanya c atau h.

Kelas Kesetaraan

Kelas kesetaraan adalah nama spesifik lokal untuk daftar karakter yang setara. Namanya tertutup = dan =. Misalnya, nama e mungkin digunakan untuk mewakili semua `` e, '' `e ',' 'dan` `e`.' 'Dalam kasus ini, = e = adalah ekspresi reguler yang cocok dengan salah satu e, e ', atau e`.

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

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

Berbagai opsi baris perintah mengontrol caranya melongo menafsirkan karakter dalam ekspresi reguler.

Tidak ada opsi

Dalam kasus default, melongo menyediakan semua fasilitas ekspresi reguler POSIX 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 literal w). Interval ekspresi diizinkan.

--tradisional

Unix Tradisional awk ekspresi reguler dicocokkan. Operator GNU tidak khusus, ekspresi interval tidak tersedia, dan begitu juga 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 --tradisional telah di sediakan.

Tindakan

Pernyataan tindakan dilampirkan dalam 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 (** dapat 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 a ~ atau !~. Hanya gunakan satu di sisi kanan. Ekspresi / foo / ~ exp memiliki arti yang sama dengan (($ 0 ~ / foo /) ~ exp ). Ini biasanya tidak apa yang dimaksudkan.

di

Keanggotaan Array.

&&

Logis DAN.

||

Logika OR.

?:

Ekspresi kondisional C Ini memiliki bentuk expr1 ? expr2 : expr3 . Jika expr1 itu benar, nilai dari ekspresi itu expr2 , jika tidak demikian expr3 . Hanya satu expr2 dan expr3 dievaluasi.

= += -=

*= /= %= ^= Tugas. Kedua tugas mutlak ( var = nilai ) dan operator-assignment (bentuk lain) didukung.

Laporan Kontrol

Pernyataan kontrol adalah sebagai berikut:

jika kondisi ) pernyataan lain pernyataan sementara ( kondisi ) pernyataan melakukan pernyataan sementara ( kondisi ) untuk ( expr1 ; expr2 ; expr3 ) pernyataan untuk ( var di larik ) pernyataan istirahat terus menghapus larik indeks menghapus larik keluar ekspresi { pernyataan }

Pernyataan I / O

Pernyataan input / output adalah sebagai berikut:

dekat( mengajukan , bagaimana )

Tutup file, pipa atau proses bersama. Opsional bagaimana hanya boleh digunakan ketika menutup satu ujung pipa dua arah ke proses bersama. Itu pasti nilai string juga "untuk" atau "dari".

getline

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

getline < mengajukan

Set $0 dari catatan selanjutnya mengajukan ; set NF.

getline var

Set var dari catatan masukan berikutnya; set NR, FNR.

getline var < mengajukan

Set var dari catatan selanjutnya mengajukan .

perintah | getline var

Menjalankan perintah memipakan output ke dalam $0 atau var , seperti di atas.

perintah | & getline var

Menjalankan perintah sebagai proses bersama yang menyalurkan output ke dalam $0 atau var , seperti di atas. Co-proses adalah a melongo perpanjangan.

berikutnya

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

nextfile

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

mencetak

Mencetak catatan saat ini. Rekor keluaran diakhiri dengan nilai dari ORS variabel.

mencetak expr-list

Mencetak ekspresi. Setiap ekspresi dipisahkan oleh nilai dari OFS variabel. Rekor keluaran diakhiri dengan nilai dari ORS variabel.

mencetak expr-list > mengajukan

Mencetak ekspresi aktif mengajukan . Setiap ekspresi dipisahkan oleh nilai dari OFS variabel. Rekor keluaran diakhiri dengan nilai dari ORS variabel.

printf fmt, daftar expr

Format dan cetak.

printf fmt, daftar expr > mengajukan

Format dan cetak mengajukan .

sistem( cmd-line )

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

fflush ( mengajukan )

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

Pengalihan keluaran tambahan diizinkan untuk mencetak dan printf.

cetak … >> mengajukan

menambahkan keluaran ke mengajukan .

cetak … | perintah

menulis di sebuah pipa.

cetak … | & perintah

mengirim data ke proses bersama.

Itu getline perintah mengembalikan 0 pada akhir file dan -1 pada kesalahan. Setelah kesalahan, ERRNO berisi string yang menjelaskan masalah.

CATATAN: Jika menggunakan pipa atau co-proses getline, atau dari mencetak atau printf dalam satu lingkaran, Anda harus menggunakan dekat() untuk membuat instance baru dari perintah. AWK tidak secara otomatis menutup pipa atau proses bersama ketika mereka mengembalikan EOF.

Pernyataan printf

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

% c

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

% d, %saya

Angka desimal (bagian bilangan bulat).

% e,% E

Angka floating point dari formulir - d.ddddde + - dd. Itu % E menggunakan format E dari pada e.

% f

Angka floating point dari formulir - ddd.dddddd.

% g,% G

Menggunakan % e atau % f konversi, mana yang lebih pendek, dengan nol tidak signifikan ditekan. Itu% G menggunakan format % E dari pada % e.

%Hai

Nomor oktal unsigned (juga bilangan bulat).

% u Angka desimal yang tidak bertanda tangan (sekali lagi, bilangan bulat).

% s

String karakter.

% x,% X

Nomor heksadesimal unsigned (integer). Itu % X menggunakan format ABCDEF dari padaabcdef.

%%

Tunggal % karakter; tidak ada argumen yang diubah.

Opsional, parameter tambahan mungkin terletak di antara % dan surat kontrol:

menghitung $

Menggunakan menghitung 'argumen th pada saat ini dalam format. Ini disebut a penentu posisi dan dimaksudkan terutama untuk digunakan dalam versi terjemahan dari string format, bukan dalam teks asli program AWK. Ini adalah sebuah melongo perpanjangan.

-

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. Itu + menimpa pengubah ruang.

#

Gunakan `` bentuk alternatif '' untuk surat kontrol tertentu. Untuk %Hai, berikan nol di depan. Untuk % x, dan % X, berikan yang terdepan 0x atau 0X untuk hasil non-nol. Untuk % e, % E, dan % f, hasilnya selalu mengandung titik desimal. Untuk % g, dan % G, trailing nol tidak dihapus dari hasilnya.

0

Terkemuka 0 (nol) bertindak sebagai bendera, yang menunjukkan output harus diisi dengan nol bukan 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 itu 0bendera telah digunakan, itu diisi dengan nol.

. prec

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

Dinamis lebar dan prec kemampuan ANSI C printf () rutinitas didukung. SEBUAH * di tempat baik itu lebar atau prec spesifikasi menyebabkan nilai mereka diambil dari daftar argumen menjadi printf atau sprintf (). Untuk menggunakan penentu posisi dengan lebar atau ketepatan yang dinamis, berikan menghitung $ setelah * dalam format string. Sebagai contoh, "% 3 $ * 2 $. * 1 $ s".

Nama File Khusus

Saat melakukan I / O redirection dari keduanya mencetak atau printf ke dalam file, atau via getline dari file, melongo mengenali nama file khusus secara internal. Nama file ini memungkinkan akses ke deskriptor file yang diwarisi dari melongo proses induk (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 ini dapat digunakan dengan |& co-process operator untuk membuat koneksi jaringan TCP / IP.

/ inet / tcp / lport / rhost / rport

File untuk koneksi TCP / IP di port lokal lport ke host jarak jauh rhost di port jarak jauh rport . Gunakan port 0 untuk memiliki 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 berlari melongo proses. Nama file ini sekarang sudah usang. Menggunakan PROCINFO larik 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) panggilan sistem, $2 adalah nilai dari geteuid (2) panggilan sistem, $3 adalah nilai dari getgid (2) panggilan sistem, dan $4 adalah nilai dari getegid (2) panggilan sistem. Jika ada bidang tambahan, mereka adalah ID grup yang dikembalikan oleh getgroups (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 dari 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.

dosa( expr )

Mengembalikan sinus dari expr , yang dalam radian.

sqrt ( expr )

Fungsi akar kuadrat.

srand ( expr )

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

Fungsi String

Melongo memiliki fungsi string built-in berikut:

asort ( s , d )

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

gensub ( r , s , h , t )

Cari string target t untuk pertandingan ekspresi reguler r . Jika h adalah string yang diawali dengan g atau G, lalu ganti semua kecocokan r dengan s . Jika tidak, h adalah angka yang menunjukkan kecocokan mana r untuk menggantikan. Jika t tidak disediakan, $0 digunakan sebagai gantinya. Dalam teks pengganti s , urutannya n , dimana n adalah angka dari 1 hingga 9, dapat digunakan untuk menunjukkan hanya teks yang cocok dengan n 'Subekspresi yang disisipkan. Urutannya 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 adalah tidak berubah.

gsub ( r , s , t )

Untuk setiap substring cocok dengan ekspresi reguler r dalam string t , ganti string s , dan mengembalikan jumlah substitusi. Jika t tidak disediakan, gunakan $0. Sebuah & dalam teks pengganti diganti dengan teks yang benar-benar cocok. Menggunakan & untuk mendapatkan literal&. (Ini harus diketik sebagai '\&'; Lihat GAWK: Pemrograman AWK yang Efektif untuk diskusi yang lebih lengkap tentang aturan untuk & 's dan garis miring terbalik dalam teks pengganti sub(), gsub (), dan gensub ().)

indeks( s , t )

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

panjangnya( s )

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

pertandingan( s , r , Sebuah )

Mengembalikan posisi dalam s di mana ekspresi regulernya r terjadi, atau 0 jika r tidak ada, dan menetapkan nilai RSTART dan RLENGTH. Perhatikan bahwa urutan argumen sama dengan untuk ~ opera