Ini ialah arahan awkposix yang boleh dijalankan dalam penyedia pengehosan percuma OnWorks menggunakan salah satu daripada berbilang stesen kerja dalam talian percuma kami seperti Ubuntu Online, Fedora Online, emulator dalam talian Windows atau emulator dalam talian MAC OS.
JADUAL:
NAMA
awk — bahasa imbasan dan pemprosesan corak
SINOPSIS
awk [−F sepstring] [−v tugasan]... program [hujah...]
awk [−F sepstring] −f progfile [−f progfile]... [−v tugasan]...
[hujah...]
DESCRIPTION
. awk utiliti hendaklah melaksanakan program yang ditulis dalam awk bahasa pengaturcaraan, iaitu
khusus untuk manipulasi data teks. An awk atur cara ialah urutan corak dan
tindakan yang sepadan. Apabila input dibaca yang sepadan dengan corak, tindakan itu dikaitkan
dengan corak tersebut dijalankan.
Input hendaklah ditafsirkan sebagai urutan rekod. Secara lalai, rekod ialah baris, kurang
penamatannya , tetapi ini boleh diubah dengan menggunakan RS pembolehubah terbina dalam. setiap satu
rekod input hendaklah dipadankan secara bergilir-gilir dengan setiap corak dalam program. Untuk setiap
corak dipadankan, tindakan yang berkaitan hendaklah dilaksanakan.
. awk utiliti hendaklah mentafsir setiap rekod input sebagai urutan medan di mana, oleh
lalai, medan ialah rentetan bukan- bukan- watak. lalai ini
dan pembatas medan boleh ditukar dengan menggunakan FS pembolehubah terbina dalam atau −F
sepstring pilihan. The awk utiliti hendaklah menandakan medan pertama dalam rekod $1, yang kedua
$2, dan seterusnya. Simbol $0 hendaklah merujuk kepada keseluruhan rekod; menetapkan mana-mana medan lain
menyebabkan penilaian semula $0. Menugaskan kepada $0 hendaklah menetapkan semula nilai semua medan lain
dan juga NF pembolehubah terbina dalam.
PILIHAN
. awk utiliti hendaklah mematuhi volum Definisi Asas POSIX.1‐2008, seksyen
12.2, utiliti Syntax Garis panduan.
Pilihan berikut hendaklah disokong:
−F sepstring
Tentukan pemisah medan input. Pilihan ini hendaklah bersamaan dengan:
-v FS =sepstring
kecuali jika −F sepstring and −v FS =sepstring kedua-duanya digunakan, ia tidak ditentukan
sama ada FS tugasan yang terhasil daripada −F sepstring diproses dalam arahan
pesanan talian atau diproses selepas yang terakhir −v FS =sepstring. Lihat penerangan
daripada FS pembolehubah terbina dalam, dan cara ia digunakan, dalam DESKRIPSI LANJUTAN
bawah seksyen ini.
−f progfile
Nyatakan nama laluan fail progfile mengandungi awk program. Nama laluan
of '−' hendaklah menandakan input standard. Jika berbilang contoh pilihan ini adalah
ditentukan, penyatuan fail yang dinyatakan sebagai progfile mengikut susunan
dinyatakan hendaklah awk program. The awk program secara alternatif boleh
dinyatakan dalam baris arahan sebagai satu hujah.
−v tugasan
Permohonan hendaklah memastikan bahawa tugasan hujah adalah dalam bentuk yang sama seperti
an tugasan operan. Tugasan pembolehubah yang ditentukan hendaklah berlaku sebelum
melaksanakan awk program, termasuk tindakan yang berkaitan dengan BEGIN corak
(jika ada). Kejadian berbilang pilihan ini boleh ditentukan.
OPERAND
Operan berikut hendaklah disokong:
program Jika tidak −f pilihan ditentukan, operan pertama kepada awk hendaklah menjadi teks daripada
awk program. Permohonan hendaklah membekalkan program operan sebagai satu
hujah untuk awk. Jika teks tidak berakhir dengan a , awk hendaklah mentafsir
teks itu seolah-olah ia berlaku.
hujah Salah satu daripada dua jenis berikut hujah boleh dicampur:
fail Nama laluan bagi fail yang mengandungi input untuk dibaca, iaitu
dipadankan dengan set corak dalam program. Jika tidak fail
operan ditentukan, atau jika a fail operan ialah '−', Standard
input hendaklah digunakan.
tugasan
Operan yang bermula dengan a atau aksara abjad
daripada set aksara mudah alih (lihat jadual dalam Definisi Asas
volum POSIX.1–2008, seksyen 6.1, Portable Watak Tetapkan), diikuti
dengan urutan garis bawah, digit dan abjad daripada
set aksara mudah alih, diikuti oleh '=' watak, hendaklah menyatakan a
penugasan pembolehubah dan bukannya nama laluan. Watak sebelum
'=' mewakili nama an awk pembolehubah; jika nama itu adalah awk
perkataan terpelihara (lihat Tatabahasa) tingkah laku tidak ditentukan. watak-watak
berikutan hendaklah ditafsirkan seolah-olah ia muncul
dalam awk program didahului dan diikuti dengan petikan berganda ('"')
watak, sebagai TALI token (lihat Tatabahasa), kecuali jika yang terakhir
watak adalah satu yang tidak dapat dielakkan , ia hendaklah ditafsirkan sebagai a
literal bukannya sebagai watak pertama urutan itu
"\"". Pembolehubah hendaklah diberikan nilai itu TALI token
dan, jika sesuai, hendaklah dipertimbangkan a angka rentetan (Lihat
Ungkapan in awk), pembolehubah itu juga hendaklah diberikan angkanya
nilai. Setiap penugasan pembolehubah tersebut hendaklah berlaku sejurus sebelum
pemprosesan yang berikut fail, jika ada. Justeru, tugasan sebelum ini
yang pertama fail hujah hendaklah dilaksanakan selepas BEGIN tindakan (jika
mana-mana), manakala tugasan selepas yang terakhir fail hujah akan berlaku
sebelum AKHIR tindakan (jika ada). Jika tiada fail hujah,
tugasan hendaklah dilaksanakan sebelum memproses input standard.
STDIN
Input standard hendaklah digunakan hanya jika tidak fail operan ditentukan, atau jika a fail
operan ialah '−', atau jika a progfile hujah pilihan ialah '−'; lihat bahagian INPUT FAIL. Jika
yang awk program tidak mengandungi tindakan dan tiada corak, tetapi sebaliknya adalah sah awk program
input standard dan mana-mana fail operan tidak boleh dibaca dan awk hendaklah keluar dengan pulangan
status sifar.
INPUT FILES
Masukkan fail ke awk program daripada mana-mana sumber berikut hendaklah fail teks:
* Mana-mana fail operan atau yang setara dengannya, dicapai dengan mengubah suai awk pembolehubah ARGV
and ARGC
* Input standard jika tiada sebarang fail operan
* Hujah kepada garis panduan fungsi
Sama ada pembolehubah RS ditetapkan kepada nilai selain daripada a atau tidak, untuk fail ini,
pelaksanaan hendaklah menyokong rekod yang ditamatkan dengan pemisah yang ditentukan sehingga
{LINE_MAX} bait dan mungkin menyokong rekod yang lebih panjang.
If −f progfile dinyatakan, permohonan hendaklah memastikan bahawa fail yang dinamakan oleh setiap
yang progfile pilihan-argumen ialah fail teks dan gabungannya, dalam susunan yang sama seperti
mereka muncul dalam hujah, adalah awk program.
PERSEKITARAN PELBAGAI
Pembolehubah persekitaran berikut akan mempengaruhi pelaksanaan awk:
BAHASA Sediakan nilai lalai untuk pembolehubah pengantarabangsaan yang tidak ditetapkan atau
null. (Lihat volum Takrif Asas POSIX.1‐2008, seksyen 8.2,
Pengantarabangsaan Pembolehubah untuk keutamaan pengantarabangsaan
pembolehubah yang digunakan untuk menentukan nilai kategori tempat.)
LC_ALL Jika ditetapkan kepada nilai rentetan bukan kosong, ganti nilai semua yang lain
pembolehubah pengantarabangsaan.
LC_COLLATE
Tentukan tempat untuk kelakuan julat, kelas kesetaraan dan berbilang
watak menyusun elemen dalam ungkapan biasa dan dalam perbandingan
nilai rentetan.
LC_CTYPE Tentukan tempat untuk tafsiran jujukan bait data teks
sebagai aksara (contohnya, bait tunggal berbanding dengan aksara berbilang bait dalam
argumen dan fail input), tingkah laku kelas aksara dalam biasa
ungkapan, pengenalan aksara sebagai huruf, dan pemetaan
huruf besar dan huruf kecil untuk topper and untuk rendahkan fungsi.
LC_MESSAGES
Tentukan tempat yang harus digunakan untuk mempengaruhi format dan kandungan
mesej diagnostik yang ditulis kepada ralat standard.
LC_NUMERIC
Tentukan aksara radix yang digunakan semasa mentafsir input berangka, melakukan
penukaran antara nilai angka dan rentetan, dan memformat output angka.
Tidak kira tempatan, aksara (aksara titik perpuluhan bagi
POSIX locale) ialah aksara titik perpuluhan yang diiktiraf dalam pemprosesan awk
atur cara (termasuk tugasan dalam hujah baris arahan).
NLSPATH Tentukan lokasi katalog mesej untuk pemprosesan LC_MESSAGES.
PATH Tentukan laluan carian apabila mencari arahan yang dilaksanakan oleh sistem(expr), atau
paip input dan output; lihat volum Takrif Asas POSIX.1‐2008, Bab
8, alam Sekitar Pembolehubah.
Di samping itu, semua pembolehubah persekitaran hendaklah boleh dilihat melalui awk berubah-ubah ALAM SEKITAR.
ASYNCRONOUS ACARA
Lalai.
STDOUT
Sifat fail output bergantung pada awk program.
STDERR
Ralat standard hendaklah digunakan hanya untuk mesej diagnostik.
OUTPUT FILES
Sifat fail output bergantung pada awk program.
EXTENDED DESCRIPTION
Keseluruhan Program struktur
An awk program terdiri daripada pasangan bentuk:
pola { tindakan }
Sama ada corak atau tindakan (termasuk aksara pendakap yang disertakan) boleh
ditinggalkan.
Corak yang hilang hendaklah sepadan dengan sebarang rekod input, dan tindakan yang hilang hendaklah
bersamaan dengan:
{ cetak }
Pelaksanaan awk program hendaklah dimulakan dengan terlebih dahulu melaksanakan tindakan yang berkaitan dengan
semua BEGIN corak dalam susunan ia berlaku dalam program. Kemudian masing-masing fail operan (atau
input standard jika tiada fail dinyatakan) hendaklah diproses secara bergilir-gilir dengan membaca data daripada
fail sehingga pemisah rekod dilihat ( secara lalai). Sebelum yang pertama
rujukan kepada medan dalam rekod dinilai, rekod hendaklah dibahagikan kepada medan,
mengikut peraturan dalam Biasa Ungkapan, menggunakan nilai FS yang semasa di
masa rekod itu dibaca. Setiap corak dalam program kemudiannya hendaklah dinilai dalam
susunan kejadian, dan tindakan yang dikaitkan dengan setiap corak yang sepadan dengan arus
rekod dilaksanakan. Tindakan untuk corak padanan hendaklah dilaksanakan sebelum menilai
corak seterusnya. Akhirnya, tindakan yang berkaitan dengan semua AKHIR corak hendaklah
dilaksanakan mengikut susunan ia berlaku dalam program.
Ungkapan in awk
Ungkapan menerangkan pengiraan yang digunakan dalam corak and tindakan. Dalam jadual berikut,
operasi ungkapan yang sah diberikan dalam kumpulan daripada keutamaan tertinggi dahulu hingga terendah
keutamaan terakhir, dengan pengendali keutamaan sama dikumpulkan antara garis mendatar. Dalam
penilaian ungkapan, di mana tatabahasa secara rasmi samar-samar, keutamaan yang lebih tinggi
pengendali hendaklah dinilai sebelum pengendali keutamaan yang lebih rendah. Dalam jadual ini expr, expr1,
expr2, dan expr3 mewakili sebarang ungkapan, manakala lvalue mewakili mana-mana entiti yang boleh
ditugaskan kepada (iaitu, di sebelah kiri pengendali tugasan). Sintaks yang tepat bagi
ungkapan diberikan dalam Tatabahasa.
Jadual 4-1: Ungkapan in Pengurangan Precedence in awk
┌─────────────────────┬─────────────────────────┬─. ───────────────┬──────────────┐
│ Syntax │ Nama │ Jenis of Hasilnya │Pergaulan │
├─────────────────────┼─────────────────────────┼─. ───────────────┼──────────────┤
│( expr ) │Pengumpulan │Jenis expr │T/A │
├─────────────────────┼─────────────────────────┼─. ───────────────┼──────────────┤
│$expr │Rujukan medan │String │N/A │
├─────────────────────┼─────────────────────────┼─. ───────────────┼──────────────┤
│lnilai ++ │Selepas kenaikan │Numerik │N/A │
│lnilai −− │Pasca pengurangan │Numerik │N/A │
├─────────────────────┼─────────────────────────┼─. ───────────────┼──────────────┤
│++ lnilai │Pra-kenaikan │Numerik │N/A │
│−− lnilai │Pra pengurangan │Numerik │N/A │
├─────────────────────┼─────────────────────────┼─. ───────────────┼──────────────┤
│expr ^ expr │Pengeksponenan │Angka │Kanan │
├─────────────────────┼─────────────────────────┼─. ───────────────┼──────────────┤
│! expr │Logik bukan │Numeric │N/A │
│+ expr │Unary tambah │Numeric │N/A │
│− expr │Unari tolak │Numerik │N/A │
├─────────────────────┼─────────────────────────┼─. ───────────────┼──────────────┤
│expr * expr │Pendaraban │Angka │Kiri │
│expr / expr │Bahagian │Numerik │Kiri │
│expr % expr │Modul │Numerik │Kiri │
├─────────────────────┼─────────────────────────┼─. ───────────────┼──────────────┤
│expr + expr │Tambahan │Numerik │Kiri │
│expr - expr │Penolakan │Numerik │Kiri │
├─────────────────────┼─────────────────────────┼─. ───────────────┼──────────────┤
│expr expr │Sambungan rentetan │Rentetan │Kiri │
├─────────────────────┼─────────────────────────┼─. ───────────────┼──────────────┤
│expr < expr │Kurang daripada │Numeric │Tiada │
│expr <= expr │Kurang daripada atau sama dengan │Angka │Tiada │
│expr != expr │Tidak sama dengan │Numerik │Tiada │
│expr == expr │Sama dengan │Numerik │Tiada │
│expr > expr │Lebih besar daripada │Angka │Tiada │
│expr >= expr │Lebih besar daripada atau sama dengan │Angka │Tiada │
├─────────────────────┼─────────────────────────┼─. ───────────────┼──────────────┤
│expr ~ expr │ERE padanan │Numerik │Tiada │
│expr !~ expr │ERE bukan padanan │Angka │Tiada │
├─────────────────────┼─────────────────────────┼─. ───────────────┼──────────────┤
│expr dalam tatasusunan │Keahlian tatasusunan │Numerik │Kiri │
│( indeks ) dalam pelbagai │ Tatasusunan berbilang dimensi │Numerik │Kiri │
│ │keahlian │ │ │
├─────────────────────┼─────────────────────────┼─. ───────────────┼──────────────┤
│expr && expr │Logik DAN │Numerik │Kiri │
├─────────────────────┼─────────────────────────┼─. ───────────────┼──────────────┤
│expr || expr │Logik ATAU │Numerik │Kiri │
├─────────────────────┼─────────────────────────┼─. ───────────────┼──────────────┤
│expr1 ? expr2 : expr3│Ungkapan bersyarat │Jenis yang dipilih│Kanan │
│ │ │expr2 or expr3 │ │
├─────────────────────┼─────────────────────────┼─. ───────────────┼──────────────┤
│lnilai ^= expr │Penugasan eksponen│Numerik │Kanan │
│lnilai %= expr │Penugasan modulus │Numeric │Kanan │
│lnilai *= expr │Tugasan pendaraban│Numerik │Kanan │
│lnilai /= expr │Tugasan bahagian │Numeric │Kanan │
│lnilai += expr │Tugasan tambahan │Numeric │Kanan │
│lnilai −= expr │Penugasan penolakan │Angka │Kanan │
│lnilai = expr │Tugasan │Jenis expr │Betul │
└─────────────────────┴─────────────────────────┴─. ───────────────┴──────────────┘
Setiap ungkapan hendaklah mempunyai sama ada nilai rentetan, nilai angka, atau kedua-duanya. Kecuali sebagai
dinyatakan untuk konteks tertentu, nilai ungkapan hendaklah secara tersirat ditukar kepada
jenis yang diperlukan untuk konteks di mana ia digunakan. Nilai rentetan hendaklah ditukar kepada
nilai berangka sama ada dengan yang setara dengan panggilan berikut ke fungsi yang ditakrifkan oleh
standard ISO C:
setlocale(LC_NUMERIC, "");
nilai_numerik = atof(nilai_rentetan);
atau dengan menukar bahagian awal rentetan kepada menaip dua kali ganda perwakilan sebagai
ikut:
Rentetan input diuraikan kepada dua bahagian: jujukan awal, mungkin kosong
daripada aksara ruang putih (seperti yang ditentukan oleh ruang kosong()) dan urutan subjek
ditafsirkan sebagai pemalar titik terapung.
Bentuk urutan subjek yang dijangkakan adalah pilihan '+' or '−' tanda, kemudian a
turutan digit bukan kosong secara pilihan yang mengandungi a , kemudian pilihan
bahagian eksponen. Bahagian eksponen terdiri daripada 'e' or 'E', diikuti dengan pilihan
tanda, diikuti dengan satu atau lebih digit perpuluhan.
Urutan bermula dengan digit pertama atau (mana yang berlaku dahulu)
ditafsirkan sebagai pemalar terapung bahasa C, dan jika bukan eksponen
bahagian mahupun a muncul, a diandaikan mengikut digit terakhir dalam
tali. Jika urutan subjek bermula dengan tanda tolak, nilai yang terhasil daripada
penukaran dinafikan.
Nilai berangka yang betul-betul sama dengan nilai integer (lihat seksyen 1.1.2,
Konsep Berasal dari yang ISO C Standard) hendaklah ditukar kepada rentetan dengan yang setara
panggilan kepada pecut fungsi (lihat Rentetan Fungsi) dengan rentetan "%d" sebagai fmt
hujah dan nilai berangka ditukar sebagai yang pertama dan satu-satunya expr hujah. mana-mana
nilai berangka lain hendaklah ditukar kepada rentetan dengan setara dengan panggilan ke
pecut fungsi dengan nilai pembolehubah CONVFMT sebagai fmt hujah dan
nilai berangka ditukar sebagai yang pertama dan satu-satunya expr hujah. Hasil daripada
penukaran tidak ditentukan jika nilai bagi CONVFMT bukan format titik terapung
spesifikasi. Jumlah POSIX.1‐2008 ini tidak menyatakan penukaran eksplisit antara
nombor dan rentetan. Aplikasi boleh memaksa ungkapan untuk dianggap sebagai nombor oleh
menambah sifar padanya, atau boleh memaksanya untuk dianggap sebagai rentetan dengan menggabungkan nol
tali ("") kepadanya.
Nilai rentetan hendaklah dianggap a angka rentetan jika ia datang dari salah satu daripada yang berikut:
1. Pembolehubah medan
2. Input daripada garis panduan() fungsi
3. NAMA FAIL
4. ARGV unsur susunan
5. ALAM SEKITAR unsur susunan
6. Elemen tatasusunan yang dicipta oleh berpecah() fungsi
7. Tugasan pembolehubah baris arahan
8. Penetapan pembolehubah daripada pembolehubah rentetan berangka lain
dan keadaan bergantung pelaksanaan sepadan dengan sama ada kes (a) atau (b) di bawah ialah
bertemu.
a. Selepas setara dengan panggilan berikut ke fungsi yang ditakrifkan oleh ISO C
standard, string_value_end akan berbeza daripada nilai_rentetan, dan mana-mana aksara sebelum ini
aksara nol penamat dalam string_value_end akan menjadi watak:
tangki *hujung_nilai_rentetan;
setlocale(LC_NUMERIC, "");
nilai_numerik = strtod (nilai_rentetan, &string_value_end);
b. Selepas semua penukaran berikut telah digunakan, rentetan yang terhasil akan
secara leksikal diiktiraf sebagai a NOMBOR token seperti yang diterangkan oleh konvensyen leksikal dalam
Tatabahasa:
-- Semua mendahului dan mengekori aksara dibuang.
-- Jika yang pertama bukan- ialah '+' or '−', ia dibuang.
-- Setiap kemunculan aksara titik perpuluhan daripada tempat semasa ditukar
kepada a .
Dalam kes (a) nilai berangka bagi angka rentetan hendaklah nilai yang akan
dikembalikan oleh strtod() panggilan. Dalam kes (b) jika yang pertama bukan- ialah '−', angka
nilai angka rentetan hendaklah menjadi penolakan nilai berangka yang diiktiraf
NOMBOR tanda; jika tidak, nilai berangka bagi angka rentetan hendaklah angka
nilai yang diiktiraf NOMBOR token. Sama ada atau tidak rentetan ialah a angka rentetan sepatut nya
relevan hanya dalam konteks di mana istilah itu digunakan dalam bahagian ini.
Apabila ungkapan digunakan dalam konteks Boolean, jika ia mempunyai nilai angka, nilai
sifar hendaklah dianggap sebagai palsu dan sebarang nilai lain hendaklah dianggap sebagai benar. Jika tidak, a
nilai rentetan rentetan nol hendaklah dianggap sebagai palsu dan sebarang nilai lain hendaklah
diperlakukan sebagai benar. Konteks Boolean hendaklah salah satu daripada yang berikut:
* Subungkapan pertama bagi ungkapan bersyarat
* Ungkapan yang dikendalikan oleh logik NOT, logik DAN, atau logik ATAU
* Ungkapan kedua a khususnya kenyataan
* Ungkapan seorang if kenyataan
* Ungkapan daripada manakala klausa dalam sama ada a manakala or do...manakala kenyataan
* Ungkapan yang digunakan sebagai corak (seperti dalam Struktur Program Keseluruhan)
Semua aritmetik hendaklah mengikut semantik aritmetik titik terapung seperti yang ditentukan oleh
Piawaian ISO C (lihat seksyen 1.1.2, Konsep Berasal dari yang ISO C Standard).
Nilai ungkapan:
expr1 ^ expr2
hendaklah bersamaan dengan nilai yang dikembalikan oleh panggilan fungsi standard ISO C:
pow (expr1, expr2)
Ekspresi:
nilai ^= expr
hendaklah bersamaan dengan ungkapan standard ISO C:
nilai = pow(lnilai, expr)
kecuali nilai l hendaklah dinilai sekali sahaja. Nilai ungkapan:
expr1 % expr2
hendaklah bersamaan dengan nilai yang dikembalikan oleh panggilan fungsi standard ISO C:
fmod(expr1, expr2)
Ekspresi:
nilai %= expr
hendaklah bersamaan dengan ungkapan standard ISO C:
nilai = fmod(lvalue, expr)
kecuali nilai l hendaklah dinilai sekali sahaja.
Pembolehubah dan medan hendaklah ditetapkan oleh pernyataan tugasan:
nilai = ungkapan
dan jenis ungkapan hendaklah menentukan jenis pembolehubah yang terhasil. Tugasan
termasuk tugasan aritmetik ("+=", "−=", "*=", "/=", "%=", "^=", "++", "−−") semua
yang mana akan menghasilkan hasil numerik. Bahagian kiri tugasan dan
sasaran pengendali kenaikan dan pengurangan boleh menjadi salah satu pembolehubah, tatasusunan dengan indeks,
atau pemilih medan.
. awk bahasa membekalkan tatasusunan yang digunakan untuk menyimpan nombor atau rentetan. Tatasusunan
tidak perlu diisytiharkan. Mereka pada mulanya hendaklah kosong, dan saiznya akan berubah
secara dinamik. Subskrip, atau pengecam elemen, adalah rentetan, menyediakan sejenis
keupayaan tatasusunan bersekutu. Nama tatasusunan diikuti dengan subskrip dalam kurungan segi empat sama
boleh digunakan sebagai lnilai dan dengan itu sebagai ungkapan, seperti yang diterangkan dalam tatabahasa; lihat
Tatabahasa. Nama tatasusunan yang tidak dilanggan hanya boleh digunakan dalam konteks berikut:
* Parameter dalam definisi fungsi atau panggilan fungsi
* The NAMA token berikutan sebarang penggunaan kata kunci in seperti yang dinyatakan dalam tatabahasa (lihat
Tatabahasa); jika nama yang digunakan dalam konteks ini bukan nama tatasusunan, tingkah lakunya ialah
undefined
Tatasusunan yang sah indeks hendaklah terdiri daripada satu atau lebih -ungkapan yang dipisahkan, serupa dengan
cara tatasusunan berbilang dimensi diindeks dalam beberapa bahasa pengaturcaraan.
Kerana awk tatasusunan adalah benar-benar satu dimensi, seperti -senarai yang dipisahkan hendaklah
ditukar kepada rentetan tunggal dengan menggabungkan nilai rentetan bagi yang berasingan
ungkapan, setiap satu dipisahkan daripada yang lain dengan nilai SUBSEP pembolehubah. Oleh itu,
dua operasi indeks berikut hendaklah setara:
var[expr1, expr2... exprn]
var[expr1 SUBSEP expr2 SUBSEP ... SUBSEP exprn]
Permohonan hendaklah memastikan bahawa pelbagai dimensi indeks digunakan dengan in pengendali adalah
dalam kurungan. The in operator, yang menguji kewujudan tatasusunan tertentu
unsur, tidak boleh menyebabkan unsur itu wujud. Sebarang rujukan lain kepada tatasusunan yang tidak wujud
elemen akan menciptanya secara automatik.
Perbandingan (dengan '' ', "<=", "!=", "==", '>', dan ">=" operator) hendaklah dibuat
secara berangka jika kedua-dua operan adalah berangka, jika satu berangka dan satu lagi mempunyai rentetan
nilai yang merupakan rentetan berangka, atau jika satu adalah berangka dan satu lagi mempunyai yang tidak dimulakan
nilai. Jika tidak, operan hendaklah ditukar kepada rentetan seperti yang diperlukan dan rentetan
perbandingan hendaklah dibuat menggunakan urutan penyusunan khusus setempat. Nilai daripada
ungkapan perbandingan hendaklah 1 jika hubungan itu benar, atau 0 jika hubungan itu salah.
Pembolehubah and khas Pembolehubah
Pembolehubah boleh digunakan dalam awk program dengan merujuk mereka. Dengan pengecualian daripada
parameter fungsi (lihat Ditentukan oleh Pengguna Fungsi), mereka tidak diisytiharkan secara eksplisit.
Nama parameter fungsi hendaklah setempat kepada fungsi; semua nama pembolehubah lain hendaklah
global. Nama yang sama tidak boleh digunakan sebagai nama parameter fungsi dan sebagai nama
sesuatu fungsi atau khas awk pembolehubah. Nama yang sama tidak boleh digunakan kedua-duanya sebagai a
nama pembolehubah dengan skop global dan sebagai nama fungsi. Nama yang sama tidak boleh
digunakan dalam skop yang sama sebagai pembolehubah skalar dan sebagai tatasusunan. Tidak dimulakan
pembolehubah, termasuk pembolehubah skalar, elemen tatasusunan, dan pembolehubah medan, hendaklah mempunyai satu
nilai yang tidak dimulakan. Nilai yang tidak dimulakan hendaklah mempunyai kedua-dua nilai angka sifar dan a
nilai rentetan rentetan kosong. Penilaian pembolehubah dengan nilai yang tidak dimulakan, kepada
sama ada rentetan atau angka, hendaklah ditentukan oleh konteks di mana ia digunakan.
Pembolehubah medan hendaklah ditetapkan oleh a '$' diikuti dengan nombor atau ungkapan berangka.
Kesan nombor medan ungkapan menilai kepada apa-apa selain daripada yang tidak negatif
integer tidak ditentukan; pembolehubah yang tidak dimulakan atau nilai rentetan tidak perlu ditukar kepada
nilai angka dalam konteks ini. Pembolehubah medan baharu boleh dibuat dengan memberikan nilai kepada
mereka. Rujukan kepada medan yang tidak wujud (iaitu, medan selepas $NF), hendaklah menilai kepada
nilai yang tidak dimulakan. Rujukan sedemikian tidak boleh mencipta medan baharu. Walau bagaimanapun, menugaskan kepada a
medan tidak wujud (contohnya, $(NF+2)=5) hendaklah meningkatkan nilai NF; cipta mana-mana
medan campur tangan dengan nilai yang tidak dimulakan; dan menyebabkan nilai $0 menjadi
dikira semula, dengan medan dipisahkan dengan nilai FSO. Setiap pembolehubah medan
hendaklah mempunyai nilai rentetan atau nilai yang tidak dimulakan apabila dicipta. Pembolehubah medan hendaklah
mempunyai nilai yang tidak dimulakan apabila dibuat daripada $0 menggunakan FS dan pembolehubah tidak
mengandungi sebarang aksara. Jika sesuai, pembolehubah medan hendaklah dianggap sebagai angka
rentetan (lihat Ungkapan in awk).
Pelaksanaan hendaklah menyokong pembolehubah khas lain berikut yang ditetapkan oleh awk:
ARGC Bilangan unsur dalam ARGV susunan.
ARGV Tatasusunan hujah baris arahan, tidak termasuk pilihan dan program hujah,
bernombor dari sifar hingga ARGC-1.
Hujah-hujah dalam ARGV boleh diubah suai atau ditambah kepada; ARGC boleh diubah. Seperti masing-masing
fail input tamat, awk hendaklah memperlakukan unsur bukan nol seterusnya bagi ARGV, sehingga ke
nilai semasa bagi ARGC−1, inklusif, sebagai nama fail input seterusnya. Oleh itu,
menetapkan unsur ARGV to null bermakna ia tidak boleh dianggap sebagai
fail input. Nama '−' menunjukkan input standard. Jika hujah sepadan
format an tugasan operan, hujah ini hendaklah dianggap sebagai
tugasan bukan a fail hujah.
CONVFMT . Printf format untuk menukar nombor kepada rentetan (kecuali untuk output
kenyataan, di mana OFMT digunakan); "%.6g" secara lalai.
ALAM SEKITAR Tatasusunan yang mewakili nilai persekitaran, seperti yang diterangkan dalam exec
fungsi yang ditakrifkan dalam volum Antaramuka Sistem POSIX.1‐2008. Indeks
tatasusunan hendaklah rentetan yang terdiri daripada nama persekitaran
pembolehubah, dan nilai setiap elemen tatasusunan hendaklah rentetan yang terdiri daripada
nilai pembolehubah itu. Jika sesuai, pembolehubah persekitaran hendaklah
dianggap sebagai angka rentetan (Lihat Ungkapan in awk); elemen tatasusunan hendaklah
juga mempunyai nilai angkanya.
Dalam semua kes di mana tingkah laku awk dipengaruhi oleh pembolehubah persekitaran
(termasuk persekitaran mana-mana arahan yang awk melaksanakan melalui sistem
fungsi atau melalui ubah hala saluran paip dengan cetak penyataan, yang Printf
kenyataan, atau garis panduan fungsi), persekitaran yang digunakan hendaklah
persekitaran pada masa itu awk mula melaksanakan; ia ditakrifkan pelaksanaan
sama ada sebarang pengubahsuaian daripada ALAM SEKITAR menjejaskan persekitaran ini.
NAMA FAIL Nama laluan bagi fail input semasa. Di dalam a BEGIN tindakan nilainya
tidak ditentukan. Di dalam sebuah AKHIR tindakan nilai hendaklah nama input terakhir
fail diproses.
FNR Nombor ordinal rekod semasa dalam fail semasa. Di dalam a BEGIN
tindakan nilai hendaklah sifar. Di dalam sebuah AKHIR tindakan nilai hendaklah
nombor rekod terakhir yang diproses dalam fail terakhir yang diproses.
FS Ungkapan biasa pemisah medan input; a secara lalai.
NF Bilangan medan dalam rekod semasa. Di dalam a BEGIN tindakan, penggunaan NF
tidak ditentukan melainkan a garis panduan berfungsi tanpa a var hujah dilaksanakan
sebelum ini. Di dalam sebuah AKHIR tindakan, NF hendaklah mengekalkan nilai yang dimilikinya untuk yang terakhir
rekod dibaca, melainkan jika berikutnya, diubah hala, garis panduan berfungsi tanpa a var
hujah dilakukan sebelum memasukkan AKHIR tindakan.
NR Nombor ordinal rekod semasa dari permulaan input. Di dalam a
BEGIN tindakan nilai hendaklah sifar. Di dalam sebuah AKHIR tindakan nilai hendaklah
bilangan rekod terakhir yang diproses.
OFMT . Printf format untuk menukar nombor kepada rentetan dalam pernyataan output (lihat
Output Penyata); "%.6g" secara lalai. Hasil daripada penukaran tersebut ialah
tidak dinyatakan jika nilai bagi OFMT bukan spesifikasi format titik terapung.
FSO . cetak pemisah medan keluaran pernyataan; secara lalai.
ORS . cetak pemisah rekod keluaran penyata; a secara lalai.
RLENGTH Panjang rentetan dipadankan dengan sepadan dengan fungsi.
RS Aksara pertama nilai rentetan bagi RS hendaklah menjadi rekod input
pemisah; a secara lalai. Jika RS mengandungi lebih daripada satu watak, iaitu
keputusan tidak ditentukan. Jika RS adalah batal, maka rekod dipisahkan mengikut urutan
terdiri daripada a ditambah satu atau lebih baris kosong, mendahului atau mengekori
garisan kosong tidak boleh mengakibatkan rekod kosong pada permulaan atau akhir
input, dan a hendaklah sentiasa menjadi pemisah medan, tidak kira apa pun
nilai FS adalah.
MULAKAN Kedudukan permulaan rentetan dipadankan dengan sepadan dengan fungsi, penomboran
daripada 1. Ini hendaklah sentiasa bersamaan dengan nilai pulangan sepadan dengan
fungsi.
SUBSEP Rentetan pemisah subskrip untuk tatasusunan berbilang dimensi; nilai lalai
adalah ditakrifkan pelaksanaan.
Biasa Ungkapan
. awk utiliti hendaklah menggunakan notasi ungkapan biasa yang dilanjutkan (lihat Base
Jumlah takrifan POSIX.1‐2008, seksyen 9.4, Extended Biasa Ungkapan) kecuali itu
ia hendaklah membenarkan penggunaan konvensyen bahasa C untuk melarikan watak istimewa dalam
ERE, seperti yang dinyatakan dalam jadual dalam volum Definisi Asas POSIX.1‐2008,
Bab 5, File format notasi ('\\', '\a', '\b', '\f', '\ n', '\r', '\t', '\v') Dan
jadual berikut; urutan pelarian ini hendaklah dikenali di dalam dan di luar
ungkapan kurungan. Ambil perhatian bahawa rekod tidak perlu dipisahkan oleh watak dan
pemalar rentetan boleh mengandungi watak, begitu juga "\ n" urutan adalah sah dalam
awk ERE. Menggunakan a watak dalam ERE memerlukan pelarian yang ditunjukkan dalam
jadual berikut.
Jadual 4-2: Melarikan diri Urutan in awk
┌─────────┬────────────────────────────────────┬──. ─────────────────────────────────────
│ Melarikan diri │ │ │
│Urutan │ Penerangan Produk │ Pengertian │
├─────────┼────────────────────────────────────┼──. ────────────────────────────────────
│\" │ │ watak │
├─────────┼────────────────────────────────────┼──. ────────────────────────────────────
│\/ │ │ watak │
├─────────┼────────────────────────────────────┼──. ────────────────────────────────────
│\ddd │ A aksara diikuti │ Aksara yang pengekodannya ialah │
│ │ dengan urutan terpanjang satu, │ diwakili oleh satu, dua, atau │
│ │ dua, atau tiga digit oktal │ integer oktal tiga digit. Berbilang- │
│ │ aksara (01234567). Jika semua aksara │ bait memerlukan berbilang, │
│ │ digit ialah 0 (iaitu, │ urutan pelarian bercantum │
│ │ perwakilan NUL │ jenis ini, termasuk yang terkemuka │
│ │ watak), tingkah laku ialah │ untuk setiap bait. │
│ │ tidak ditentukan. │ │
├─────────┼────────────────────────────────────┼──. ────────────────────────────────────
│\c │ A aksara diikuti │ Tidak ditentukan │
│ │ oleh mana-mana aksara yang tidak diterangkan dalam │ │
│ │ jadual ini atau dalam jadual dalam │ │
│ │ Takrif Asas isipadu │ │
│ │ POSIX.1‐2008, Bab 5, File │ │
│ │ format notasi ('\\', '\a', '\b', │ │
│ │ '\f', '\ n', '\r', '\t', '\v'). │ │
└─────────┴────────────────────────────────────┴──. ─────────────────────────────────────
Ungkapan biasa boleh dipadankan dengan medan atau rentetan tertentu dengan menggunakan salah satu daripada
dua pengendali padanan ungkapan biasa, '~' and "!~". Pengendali ini hendaklah mentafsir
operan tangan kanan mereka sebagai ungkapan biasa dan operan kiri mereka sebagai rentetan.
Jika ungkapan biasa sepadan dengan rentetan, the '~' ungkapan hendaklah menilai kepada nilai
daripada 1, dan "!~" ungkapan hendaklah menilai kepada nilai 0. (Ungkapan biasa
operasi pemadanan adalah seperti yang ditakrifkan oleh istilah yang dipadankan dalam volum Definisi Asas bagi
POSIX.1–2008, seksyen 9.1, Biasa ungkapan Definisi, di mana perlawanan berlaku pada mana-mana
sebahagian daripada rentetan melainkan ungkapan biasa terhad dengan atau
aksara khas.) Jika ungkapan biasa tidak sepadan dengan rentetan,
yang '~' ungkapan hendaklah menilai kepada nilai 0, dan "!~" ungkapan hendaklah menilai
kepada nilai 1. Jika operan kanan ialah sebarang ungkapan selain daripada token leksikal
MASA, nilai rentetan ungkapan hendaklah ditafsirkan sebagai tetapan lanjutan
ungkapan, termasuk konvensyen melarikan diri yang diterangkan di atas. Perhatikan bahawa pelarian yang sama ini
konvensyen juga hendaklah digunakan dalam menentukan nilai literal rentetan (the
token leksikal TALI), dan dengan itu hendaklah digunakan untuk kali kedua apabila rentetan literal
digunakan dalam konteks ini.
Apabila MASA token muncul sebagai ungkapan dalam mana-mana konteks selain sebagai sebelah kanan
yang '~' or "!~" operator atau sebagai salah satu argumen fungsi terbina dalam yang diterangkan di bawah, the
nilai ungkapan yang terhasil hendaklah bersamaan dengan:
$0 " " /sebentar lagi/
. sebentar lagi hujah kepada gsub, sepadan dengan, sub fungsi, dan fs hujah kepada berpecah
fungsi (lihat Rentetan Fungsi) hendaklah ditafsirkan sebagai ungkapan biasa lanjutan.
Ini boleh sama ada MASA token atau ungkapan sewenang-wenangnya, dan hendaklah ditafsirkan dalam
cara yang sama seperti sebelah kanan '~' or "!~" pengendali.
Ungkapan biasa lanjutan boleh digunakan untuk memisahkan medan dengan memberikan rentetan
mengandungi ungkapan kepada pembolehubah terbina dalam FS, sama ada secara langsung atau akibatnya
menggunakan −F sepstring pilihan. Nilai lalai bagi FS pembolehubah hendaklah tunggal
. Yang berikut menerangkan FS tingkah laku:
1. Jika FS ialah rentetan nol, tingkah laku tidak ditentukan.
2. Jika FS adalah satu watak:
a. Jika FS ialah , langkau mendahului dan mengekori dan watak;
medan hendaklah dihadkan oleh set satu atau lebih atau watak.
b. Jika tidak, jika FS adalah watak lain c, medan hendaklah dihadkan oleh setiap satu
kejadian tunggal c.
3. Jika tidak, nilai rentetan bagi FS hendaklah dianggap sebagai perkhidmatan tetap lanjutan
ungkapan. Setiap kejadian jujukan yang sepadan dengan ungkapan biasa lanjutan
hendaklah mengehadkan medan.
Kecuali untuk '~' and "!~" pengendali, dan dalam gsub, sepadan dengan, berpecah, dan sub terbina dalam
fungsi, pemadanan ERE hendaklah berdasarkan rekod input; iaitu pemisah rekod
aksara (aksara pertama nilai pembolehubah RS, secara lalai)
tidak boleh dibenamkan dalam ungkapan, dan tiada ungkapan akan sepadan dengan pemisah rekod
watak. Jika pemisah rekod tidak , aksara yang tertanam dalam
ungkapan boleh dipadankan. Untuk '~' and "!~" operator, dan dalam empat terbina dalam tersebut
fungsi, pemadanan ERE hendaklah berdasarkan rentetan teks; iaitu, sebarang watak (termasuk
dan pemisah rekod) boleh dibenamkan dalam corak, dan yang sesuai
corak hendaklah sepadan dengan mana-mana watak. Walau bagaimanapun, dalam semua awk Padanan ERE, penggunaan satu atau
lebih banyak aksara NUL dalam corak, rekod input atau rentetan teks menghasilkan undefined
keputusan.
Corak
A pola adalah sah ungkapan, julat yang ditentukan oleh dua ungkapan yang dipisahkan oleh a
koma, atau salah satu daripada dua corak khas BEGIN or AKHIR.
khas Corak
. awk utiliti hendaklah mengenali dua corak khas, BEGIN and AKHIR. setiap BEGIN pola
hendaklah dipadankan sekali dan tindakan berkaitannya dilaksanakan sebelum rekod input pertama
dibaca—kecuali mungkin dengan menggunakan garis panduan fungsi (lihat Input / Output and Umum
Fungsi) sebelum ini BEGIN tindakan—dan sebelum penetapan baris arahan dilakukan. setiap satu AKHIR
corak hendaklah dipadankan sekali dan tindakan berkaitannya dilaksanakan selepas rekod terakhir
input telah dibaca. Kedua-dua corak ini hendaklah mempunyai tindakan yang berkaitan.
BEGIN and AKHIR tidak boleh digabungkan dengan corak lain. Pelbagai BEGIN and AKHIR corak hendaklah
dibenarkan. Tindakan yang berkaitan dengan BEGIN corak hendaklah dilaksanakan mengikut susunan
dinyatakan dalam program, seperti juga AKHIR tindakan. An AKHIR corak boleh mendahului a BEGIN
corak dalam sesuatu program.
Jika sesuatu awk program hanya terdiri daripada tindakan dengan corak BEGIN, Dan BEGIN tindakan
mengandungi No. garis panduan fungsi, awk hendaklah keluar tanpa membaca inputnya apabila yang terakhir
kenyataan yang terakhir BEGIN tindakan dilaksanakan. Jika an awk program hanya terdiri daripada tindakan
dengan corak AKHIR atau hanya tindakan dengan corak BEGIN and AKHIR, input hendaklah
baca sebelum kenyataan dalam AKHIR tindakan dilaksanakan.
ungkapan Corak
Corak ungkapan hendaklah dinilai seolah-olah ia adalah ungkapan dalam konteks Boolean.
Jika keputusannya benar, corak hendaklah dianggap sepadan, dan tindakan yang berkaitan
(jika ada) hendaklah dilaksanakan. Jika keputusannya palsu, tindakan itu tidak boleh dilaksanakan.
corak Banjaran
Julat corak terdiri daripada dua ungkapan yang dipisahkan dengan koma; dalam kes ini, tindakan
hendaklah dilakukan untuk semua rekod antara padanan ungkapan pertama dan
berikut padanan ungkapan kedua, termasuk. Pada ketika ini, julat corak boleh
diulang bermula pada rekod input selepas penghujung julat yang dipadankan.
Tindakan
Tindakan ialah urutan pernyataan seperti yang ditunjukkan dalam tatabahasa dalam Tatabahasa. Mana-mana single
pernyataan boleh digantikan dengan senarai pernyataan yang disertakan dalam pendakap kerinting. Permohonan
hendaklah memastikan bahawa penyata dalam senarai penyata dipisahkan oleh atau
watak. Pernyataan dalam senarai penyata hendaklah dilaksanakan secara berurutan mengikut susunan
bahawa mereka muncul.
. ungkapan bertindak sebagai bersyarat dalam suatu if kenyataan hendaklah dinilai dan jika ia
bukan sifar atau bukan nol, pernyataan berikut hendaklah dilaksanakan; sebaliknya, jika lagi is
hadir, kenyataan berikutan lagi hendaklah dilaksanakan.
. if, manakala, do...manakala, khususnya, memecahkan, dan terus pernyataan adalah berdasarkan ISO C
standard (lihat seksyen 1.1.2, Konsep Berasal dari yang ISO C Standard), kecuali bahawa
Ungkapan Boolean hendaklah dianggap seperti yang diterangkan dalam Ungkapan in awk, dan kecuali dalam
kes:
khususnya (berubah-ubah in pelbagai)
yang akan berulang, memberikan setiap satu indeks of pelbagai kepada berubah-ubah dalam susunan yang tidak ditentukan.
Hasil penambahan elemen baru ke pelbagai dalam tempoh sedemikian khususnya gelung tidak ditentukan. Sekiranya
memecahkan or terus kenyataan berlaku di luar gelung, tingkah laku tidak ditentukan.
. memadam pernyataan hendaklah mengalih keluar elemen tatasusunan individu. Oleh itu, kod berikut
memadam keseluruhan tatasusunan:
khususnya (indeks in tatasusunan)
memadam tatasusunan[indeks]
. seterusnya kenyataan hendaklah menyebabkan semua pemprosesan selanjutnya rekod input semasa menjadi
terbengkalai. Tingkah laku tidak ditentukan jika a seterusnya kenyataan muncul atau digunakan dalam a BEGIN
or AKHIR tindakan.
. keluar kenyataan hendaklah memanggil semua AKHIR tindakan mengikut urutan di mana ia berlaku dalam
sumber program dan kemudian menamatkan program tanpa membaca input lanjut. An keluar
pernyataan di dalam an AKHIR tindakan hendaklah menamatkan program tanpa pelaksanaan selanjutnya
AKHIR tindakan. Jika ungkapan dinyatakan dalam an keluar penyata, nilai berangkanya hendaklah
menjadi status keluar daripada awk, melainkan ralat berikutnya ditemui atau ralat berikutnya keluar
pernyataan dengan ungkapan dilaksanakan.
Output Penyata
Kedua-dua cetak and Printf penyata hendaklah menulis kepada output standard secara lalai. Keluaran
hendaklah ditulis ke lokasi yang ditentukan oleh output_redirection jika satu dibekalkan, sebagai
ikut:
> ungkapan
>> ungkapan
| ungkapan
Dalam semua kes, ungkapan hendaklah dinilai untuk menghasilkan rentetan yang digunakan sebagai a
nama laluan untuk ditulis (untuk '>' or ">>") atau sebagai arahan untuk dilaksanakan (untuk '|').
Menggunakan dua borang pertama, jika fail dengan nama itu tidak dibuka pada masa ini, ia hendaklah
dibuka, menciptanya jika perlu dan menggunakan borang pertama, memotong fail. Keluaran
maka hendaklah dilampirkan pada fail. Selagi fail masih terbuka, panggilan berikutnya masuk
yang ungkapan menilai kepada nilai rentetan yang sama hanya perlu menambah output ke
fail. Fail kekal terbuka sehingga rapat fungsi (lihat Input / Output and Umum
Fungsi) dipanggil dengan ungkapan yang menilai kepada nilai rentetan yang sama.
Borang ketiga hendaklah menulis output pada aliran yang disalurkan ke input arahan. The
aliran hendaklah diwujudkan jika tiada aliran dibuka pada masa ini dengan nilai ungkapan sebagai
nama arahan. Strim yang dibuat hendaklah bersamaan dengan satu yang dicipta oleh panggilan ke
timbul() fungsi yang ditakrifkan dalam isipadu Antaramuka Sistem POSIX.1‐2008 dengan nilai
ungkapan sebagai arahan hujah dan nilai w sebagai mod hujah. Selagi itu
strim kekal terbuka, panggilan berikutnya di mana ungkapan menilai kepada rentetan yang sama
nilai hendaklah menulis output kepada aliran sedia ada. Aliran itu hendaklah kekal terbuka sehingga
rapat fungsi (lihat Input / Output and Umum Fungsi) dipanggil dengan ungkapan bahawa
menilai kepada nilai rentetan yang sama. Pada masa itu, aliran itu hendaklah ditutup seolah-olah oleh a
panggilan ke pclose() fungsi yang ditakrifkan dalam volum Antaramuka Sistem POSIX.1‐2008.
Seperti yang diterangkan secara terperinci oleh tatabahasa dalam Tatabahasa, penyata output ini hendaklah mengambil masa a
-senarai yang dipisahkan daripada ungkapans dirujuk dalam tatabahasa oleh bukan terminal
simbol expr_list, print_expr_list, Atau print_expr_list_opt. Senarai ini dirujuk di sini
sebagai ungkapan senarai, dan setiap ahli dirujuk sebagai seorang ungkapan hujah.
. cetak pernyataan hendaklah menulis nilai setiap hujah ungkapan pada yang ditunjukkan
aliran keluaran dipisahkan oleh pemisah medan keluaran semasa (lihat pembolehubah FSO di atas),
dan ditamatkan oleh pemisah rekod output (lihat pembolehubah ORS atas). Semua ungkapan
hujah hendaklah diambil sebagai rentetan, ditukar jika perlu; penukaran ini hendaklah
menjadi seperti yang diterangkan dalam Ungkapan in awk, dengan pengecualian bahawa Printf format dalam OFMT
hendaklah digunakan dan bukannya nilai dalam CONVFMT. Senarai ungkapan kosong hendaklah bermaksud
keseluruhan rekod input ($0).
. Printf pernyataan hendaklah menghasilkan output berdasarkan tatatanda yang serupa dengan Format Fail
Notasi yang digunakan untuk menerangkan format fail dalam jilid POSIX.1‐2008 ini (lihat Pangkalan
Jumlah takrifan POSIX.1‐2008, Bab 5, File format notasi). Output hendaklah
dihasilkan seperti yang dinyatakan dengan yang pertama ungkapan hujah sebagai rentetan format and
seterusnya ungkapan hujah sebagai rentetan arg1 kepada argn, inklusif, dengan yang berikut
pengecualian:
1. The format hendaklah menjadi rentetan aksara sebenar dan bukannya perwakilan grafik.
Oleh itu, ia tidak boleh mengandungi kedudukan aksara kosong. The di dalam format
rentetan, dalam sebarang konteks selain a bendera daripada spesifikasi penukaran, hendaklah
dianggap sebagai watak biasa yang disalin ke output.
2. Jika set aksara mengandungi a '' watak dan watak itu muncul dalam format
rentetan, ia hendaklah dianggap sebagai aksara biasa yang disalin ke output.
3. The melarikan diri urutan bermula dengan a watak hendaklah dianggap sebagai
urutan aksara biasa yang disalin ke output. Perhatikan bahawa ini sama
urutan hendaklah ditafsirkan secara leksikal oleh awk apabila ia muncul dalam rentetan literal,
tetapi mereka tidak boleh dilayan secara khusus oleh Printf kenyataan.
4. The bidang lebar or ketepatan boleh dinyatakan sebagai '*' aksara bukannya digit
tali. Dalam kes ini, hujah seterusnya daripada senarai ungkapan hendaklah diambil dan
nilai berangkanya diambil sebagai lebar medan atau ketepatan.
5. Pelaksanaan tidak boleh mendahului atau mengikuti output daripada d or u Penukaran
aksara penentu dengan aksara yang tidak dinyatakan oleh format tali.
6. Pelaksanaan hendaklah tidak mendahului keluaran daripada o watak penentu penukaran
dengan sifar pendahuluan yang tidak ditentukan oleh format tali.
7. Untuk c aksara penentu penukaran: jika argumen mempunyai nilai angka,
aksara yang pengekodannya ialah nilai itu hendaklah dikeluarkan. Jika nilainya sifar atau tidak
pengekodan mana-mana aksara dalam set aksara, tingkah laku tidak ditentukan. Sekiranya
argumen tidak mempunyai nilai berangka, aksara pertama nilai rentetan hendaklah
menjadi output; jika rentetan tidak mengandungi sebarang aksara, tingkah laku itu tidak ditentukan.
8. Bagi setiap spesifikasi penukaran yang menggunakan hujah, ungkapan seterusnya
hujah hendaklah dinilai. Dengan pengecualian daripada c penentu penukaran
aksara, nilai hendaklah ditukar (mengikut peraturan yang dinyatakan dalam
Ungkapan in awk) kepada jenis yang sesuai untuk spesifikasi penukaran.
9. Jika tiada hujah ungkapan yang mencukupi untuk memenuhi semua penukaran
spesifikasi dalam format rentetan, tingkah laku tidak ditentukan.
10. Jika sebarang urutan aksara dalam format rentetan bermula dengan a '%' watak, tetapi melakukannya
tidak membentuk spesifikasi penukaran yang sah, tingkah laku tidak ditentukan.
Kedua-dua cetak and Printf boleh mengeluarkan sekurang-kurangnya {LINE_MAX} bait.
Fungsi
. awk bahasa mempunyai pelbagai fungsi terbina dalam: aritmetik, rentetan, input/output,
dan umum.
Aritmetik Fungsi
Fungsi aritmetik, kecuali untuk int, hendaklah berdasarkan piawaian ISO C (lihat
seksyen 1.1.2, Konsep Berasal dari yang ISO C Standard). Tingkah laku tidak ditentukan dalam
kes di mana piawaian ISO C menyatakan bahawa ralat dikembalikan atau tingkah laku itu
tidak ditentukan. Walaupun tatabahasa (lihat Tatabahasa) membenarkan fungsi terbina dalam muncul dengan no
hujah atau kurungan, melainkan hujah atau kurungan ditunjukkan sebagai pilihan dalam
senarai berikut (dengan memaparkannya dalam "[]" kurungan), penggunaan sedemikian tidak ditentukan.
atan2(y,x)
Kembalikan arctangent daripada y/x dalam radian dalam julat [−π,π].
cos(x) Pulangan kosinus bagi x, Di mana x berada dalam radian.
tanpa(x) Pulangan sinus daripada x, Di mana x berada dalam radian.
exp(x) Kembalikan fungsi eksponen bagi x.
log(x) Kembalikan logaritma asli bagi x.
persegi(x) Kembalikan punca kuasa dua bagi x.
int(x) Kembalikan hujah yang dipotong kepada integer. Pemangkasan hendaklah ke arah 0 apabila
x> 0.
rand() Kembalikan nombor rawak n, supaya 0≤n
srand([expr])
Tetapkan nilai benih untuk rand kepada expr atau gunakan masa hari jika expr ditinggalkan.
Nilai benih sebelumnya hendaklah dikembalikan.
Rentetan Fungsi
Fungsi rentetan dalam senarai berikut hendaklah disokong. Walaupun tatabahasa (lihat
Tatabahasa) membenarkan fungsi terbina dalam muncul tanpa hujah atau kurungan, melainkan jika
hujah atau kurungan ditunjukkan sebagai pilihan dalam senarai berikut (dengan memaparkan
mereka dalam "[]" kurungan), penggunaan sedemikian tidak ditentukan.
gsub(sebentar lagi, pengganti[, in])
berkelakuan seperti sub (lihat di bawah), kecuali ia akan menggantikan semua kejadian
ungkapan biasa (seperti ed pengganti global utiliti) dalam $0 atau dalam in
hujah, apabila dinyatakan.
indeks(s, t)
Kembalikan kedudukan, dalam aksara, penomboran dari 1, dalam rentetan s mana rentetan t
pertama berlaku, atau sifar jika ia tidak berlaku sama sekali.
panjang[([s])]
Kembalikan panjang, dalam aksara, hujahnya yang diambil sebagai rentetan, atau daripada
keseluruhan rekod, $0, jika tiada hujah.
sepadan dengan(s, sebentar lagi)
Kembalikan kedudukan, dalam aksara, penomboran dari 1, dalam rentetan s Dimanakah
ungkapan biasa yang dilanjutkan sebentar lagi berlaku, atau sifar jika ia tidak berlaku sama sekali.
RSTART hendaklah ditetapkan ke kedudukan permulaan (yang sama dengan kedudukan yang dikembalikan
nilai), sifar jika tiada padanan ditemui; RLENGTH hendaklah ditetapkan kepada panjang
rentetan dipadankan, −1 jika tiada padanan ditemui.
berpecah(s, a[, fs ])
Pisahkan tali s ke dalam elemen tatasusunan a[1], a[2], ..., a[n], dan kembali n. Semua
elemen tatasusunan hendaklah dipadamkan sebelum pemisahan dilakukan. The
pengasingan hendaklah dilakukan dengan ERE fs atau dengan pemisah medan FS if fs is
tidak diberi. Setiap elemen tatasusunan hendaklah mempunyai nilai rentetan apabila dicipta dan, jika
sesuai, elemen tatasusunan hendaklah dianggap sebagai rentetan angka (lihat
Ungkapan in awk). Kesan rentetan nol sebagai nilai fs is
tidak dinyatakan.
pecut(fmt, expr, expr,...)
Formatkan ungkapan mengikut Printf format yang diberikan oleh fmt dan kembali
rentetan yang terhasil.
sub(sebentar lagi, pengganti[, in ])
Gantikan rentetan pengganti sebagai ganti contoh pertama yang dilanjutkan
ekspresi biasa MASA dalam tali in dan kembalikan bilangan penggantian. An
('&') muncul dalam rentetan pengganti hendaklah digantikan dengan rentetan
dari in yang sepadan dengan ERE. An didahului dengan a hendaklah
ditafsirkan sebagai literal watak. Kejadian dua
berturut-turut aksara hendaklah ditafsirkan sebagai satu literal sahaja
watak. Sebarang kejadian lain a (sebagai contoh,
mendahului mana-mana aksara lain) hendaklah dianggap sebagai literal
watak. Perhatikan bahawa jika pengganti ialah rentetan literal (token leksikal TALI; lihat
Tatabahasa), pengendalian watak berlaku selepas sebarang leksikal
pemprosesan, termasuk sebarang leksikal -proses urutan melarikan diri. Jika in
ditentukan dan ia bukan nilai (lihat Ungkapan in awk), tingkah laku adalah
tidak ditentukan. Jika in ditinggalkan, awk hendaklah menggunakan rekod semasa ($0) sebagai gantinya.
substrat(s, m[, n ])
Pulang paling banyak n-subrentetan aksara daripada s yang bermula pada kedudukan m,
penomboran daripada 1. Jika n ditinggalkan, atau jika n menentukan lebih banyak aksara daripada yang ada
ditinggalkan dalam rentetan, panjang subrentetan hendaklah dihadkan oleh panjangnya
tali itu s.
untuk rendahkan(s)
Kembalikan rentetan berdasarkan rentetan s. Setiap watak dalam s iaitu huruf besar
surat yang dinyatakan mempunyai a untuk rendahkan pemetaan oleh LC_CTYPE kategori yang
tempat semasa hendaklah digantikan dalam rentetan yang dikembalikan dengan huruf kecil
ditentukan oleh pemetaan. Watak lain dalam s hendaklah tidak berubah dalam
rentetan yang dikembalikan.
topper(s)
Kembalikan rentetan berdasarkan rentetan s. Setiap watak dalam s iaitu huruf kecil
surat yang dinyatakan mempunyai a topper pemetaan oleh LC_CTYPE kategori yang
tempat semasa digantikan dalam rentetan yang dikembalikan dengan huruf besar
ditentukan oleh pemetaan. Watak lain dalam s tidak berubah dalam pengembalian
tali.
Semua fungsi sebelumnya yang mengambil MASA sebagai parameter mengharapkan corak atau rentetan
ungkapan bernilai yang merupakan ungkapan biasa seperti yang ditakrifkan dalam Biasa Ungkapan.
Input / Output and Umum Fungsi
Input/output dan fungsi umum ialah:
rapat(ungkapan)
Tutup fail atau paip yang dibuka oleh a cetak or Printf kenyataan atau panggilan ke
garis panduan dengan nilai rentetan yang sama ungkapan. Had bilangan buka
ungkapan hujah adalah ditakrifkan pelaksanaan. Sekiranya penutupan itu berjaya, yang
fungsi hendaklah mengembalikan sifar; jika tidak, ia akan mengembalikan bukan sifar.
ungkapan | garis panduan [var]
Baca rekod input daripada aliran yang disalurkan daripada output arahan. The
aliran hendaklah diwujudkan jika tiada aliran dibuka pada masa ini dengan nilai
ungkapan sebagai nama perintahnya. Strim yang dibuat hendaklah bersamaan dengan satu
dicipta oleh panggilan ke timbul() fungsi dengan nilai ungkapan sebagai
arahan hujah dan nilai r sebagai mod hujah. Selagi aliran
tetap terbuka, panggilan berikutnya di mana ungkapan menilai kepada rentetan yang sama
nilai hendaklah membaca rekod seterusnya daripada aliran. Aliran itu akan kekal
dibuka sehingga rapat fungsi dipanggil dengan ungkapan yang menilai kepada
nilai rentetan yang sama. Pada masa itu, aliran akan ditutup seolah-olah dengan panggilan ke
yang pclose() fungsi. Jika var ditinggalkan, $0 dan NF hendaklah ditetapkan; jika tidak, var
hendaklah ditetapkan dan, jika sesuai, ia akan dianggap sebagai rentetan angka (lihat
Ungkapan in awk).
. garis panduan operator boleh membentuk binaan yang tidak jelas apabila ada
pengendali tanpa kurungan (termasuk concatenate) di sebelah kiri '|' (kepada
permulaan ungkapan yang mengandungi garis panduan). Dalam konteks '$'
pengendali, '|' hendaklah berkelakuan seolah-olah ia mempunyai keutamaan yang lebih rendah daripada '$'. Keputusan
menilai pengendali lain tidak ditentukan, dan aplikasi yang mematuhi hendaklah
kurungkan dengan betul semua penggunaan tersebut.
garis panduan Tetapkan $0 kepada rekod input seterusnya daripada fail input semasa. Bentuk ini
garis panduan hendaklah menetapkan NF, NR, dan FNR pembolehubah.
garis panduan var
Tetapkan pembolehubah var ke rekod input seterusnya daripada fail input semasa dan, jika
sesuai, var hendaklah dianggap sebagai rentetan berangka (lihat Ungkapan in awk).
Bentuk garis panduan hendaklah menetapkan FNR and NR pembolehubah.
garis panduan [var] < ungkapan
Baca rekod input seterusnya daripada fail bernama. The ungkapan sepatut nya
dinilai untuk menghasilkan rentetan yang digunakan sebagai nama laluan. Jika fail itu
nama tidak dibuka pada masa ini, ia akan dibuka. Selagi aliran itu masih ada
terbuka, panggilan seterusnya di mana ungkapan menilai kepada nilai rentetan yang sama
hendaklah membaca rekod berikutnya daripada fail. Fail hendaklah kekal terbuka sehingga
yang rapat fungsi dipanggil dengan ungkapan yang menilai sama
nilai rentetan. Jika var ditinggalkan, $0 dan NF hendaklah ditetapkan; jika tidak, var sepatut nya
ditetapkan dan, jika sesuai, ia akan dianggap sebagai rentetan angka (lihat
Ungkapan in awk).
. garis panduan operator boleh membentuk binaan yang tidak jelas apabila ada
pengendali binari tidak berkurung (termasuk concatenate) di sebelah kanan '' '
(sehingga akhir ungkapan yang mengandungi garis panduan). Hasil daripada
menilai konstruk tersebut tidak ditentukan, dan aplikasi yang mematuhi hendaklah
kurungkan dengan betul semua penggunaan tersebut.
sistem(ungkapan)
Laksanakan arahan yang diberikan oleh ungkapan dengan cara yang setara dengan sistem()
fungsi yang ditakrifkan dalam volum Antaramuka Sistem POSIX.1‐2008 dan kembalikan
status keluar arahan.
Semua bentuk garis panduan hendaklah mengembalikan 1 untuk input yang berjaya, sifar untuk akhir fail, dan −1 untuk
kesilapan.
Jika rentetan digunakan sebagai nama fail atau saluran paip, permohonan hendaklah memastikan
bahawa rentetan adalah sama dari segi teks. Istilah ``nilai rentetan yang sama'' membayangkan
bahawa ``rentetan setara'', walaupun yang berbeza hanya mengikut watak, mewakili
fail yang berbeza.
Ditentukan oleh Pengguna Fungsi
. awk bahasa juga menyediakan fungsi yang ditentukan pengguna. Fungsi sedemikian boleh ditakrifkan sebagai:
fungsi nama([parameter...]) { kenyataan }
Fungsi boleh dirujuk ke mana-mana sahaja dalam awk program; khususnya, penggunaannya boleh
mendahului definisinya. Skop fungsi adalah global.
Parameter fungsi, jika ada, boleh sama ada skalar atau tatasusunan; tingkah laku adalah
tidak ditentukan jika nama tatasusunan diluluskan sebagai parameter yang digunakan oleh fungsi sebagai skalar, atau
jika ungkapan skalar diluluskan sebagai parameter yang digunakan oleh fungsi sebagai tatasusunan.
Parameter fungsi hendaklah diluluskan mengikut nilai jika skalar dan rujukan jika nama tatasusunan.
Bilangan parameter dalam definisi fungsi tidak perlu sepadan dengan bilangan
parameter dalam panggilan fungsi. Parameter formal yang berlebihan boleh digunakan sebagai pembolehubah tempatan.
Jika lebih sedikit argumen yang dibekalkan dalam panggilan fungsi daripada dalam definisi fungsi,
parameter tambahan yang digunakan dalam badan fungsi sebagai skalar hendaklah menilai kepada
nilai yang tidak dimulakan sehingga ia dimulakan sebaliknya, dan parameter tambahan yang
digunakan dalam badan fungsi kerana tatasusunan hendaklah dianggap sebagai tatasusunan yang tidak dimulakan di mana
setiap elemen menilai kepada nilai yang tidak dimulakan sehingga dimulakan sebaliknya.
Apabila menggunakan fungsi, tiada ruang putih boleh diletakkan di antara nama fungsi dan
kurungan pembukaan. Panggilan fungsi boleh bersarang dan panggilan rekursif boleh dibuat
fungsi. Apabila kembali daripada sebarang panggilan fungsi bersarang atau rekursif, nilai semua
parameter fungsi panggilan hendaklah tidak berubah, kecuali parameter tatasusunan yang diluluskan
dengan rujukan. The pulangan pernyataan boleh digunakan untuk mengembalikan nilai. Sekiranya pulangan kenyataan
muncul di luar definisi fungsi, tingkah laku tidak ditentukan.
Dalam definisi fungsi, aksara hendaklah menjadi pilihan sebelum pembukaan
pendakap dan selepas pendakap penutup. Takrifan fungsi boleh muncul di mana-mana dalam program
di mana corak-tindakan pasangan dibenarkan.
Tatabahasa
Tatabahasa dalam bahagian ini dan konvensyen leksikal dalam bahagian berikut hendaklah
bersama-sama menghuraikan sintaks untuk awk program. Konvensyen am untuk gaya ini
tatabahasa diterangkan dalam seksyen 1.3, Tatabahasa konvensyen. Program yang sah boleh
diwakili sebagai simbol bukan terminal program dalam tatabahasa. Sintaks formal ini hendaklah
diutamakan daripada huraian sintaks teks sebelumnya.
%token NAMA NOMBOR TALI MASA
%token FUNC_NAME /* Nama diikuti by '(' tanpa putih ruang. */
/* Kata kunci */
%token Mula Tamat
/* 'MULAI' 'TAMAT' */
%token Break Teruskan Padam Lakukan Lain
/* 'putus' 'teruskan' 'padam' 'buat' 'lain' */
%token Keluar Untuk Fungsi Jika Masuk
/* 'keluar' 'untuk' 'fungsi' 'jika' 'masuk' */
%token Cetakan Seterusnya Printf Kembali Sementara
/* 'next' 'print' 'printf' 'return' 'while' */
/* Nama fungsi terpelihara */
%token BUILTIN_FUNC_NAME
/* Satu token untuk yang berikut:
* atan2 cos sin exp log sqrt int rand srand
* panjang indeks gsub padanan berpecah sprintf sub
* substr tolower tolower close system
*/
%token GETLINE
/* Berbeza secara sintaksis daripada terbina dalam yang lain. */
/* Token dua aksara. */
%token ADD_ASSIGN SUB_ASSIGN MUL_ASSIGN DIV_ASSIGN MOD_ASSIGN POW_ASSIGN
/* '+=' '−=' '*=' '/=' '%=' '^=' */
%token ATAU DAN NO_MATCH EQ LE GE NE INCR DECR APPEND
/* '||' '&&' '!~' '==' '<=' '>=' '!=' '++' '−−' '>>' */
/* Token satu aksara. */
%token '{' '}' '(' ')' '[' ']' ',' ';' BARIS BARU
%token '+' '−' '*' '%' '^' '!' '>' '<' '|' '?' ':' ' " " ' '$' '='
%mulakan program
%%
program : item_list
| actionless_item_list
;
item_list : newline_opt
| penamat item_item_tindakan_senarai
| item_list penamat item
| item_list penamat tindakan
;
actionless_item_list : item_list pattern terminator
| penamat corak actionless_item_list
;
item : aksi corak
| Fungsi NAME '(' param_list_opt ')'
tindakan newline_opt
| Fungsi FUNC_NAME '(' param_list_opt ')'
tindakan newline_opt
;
param_list_opt : /* kosong */
| senarai_param
;
senarai_param : NAME
| param_list ',' NAME
;
corak: Mula
| tamat
| expr
| expr ',' newline_opt expr
;
tindakan : '{' newline_opt '}'
| '{' newline_opt terminated_statement_list '}'
| '{' newline_opt unterminated_statement_list '}'
;
terminator : terminator ';'
| penamat NEWLINE
| ';'
| BARIS BARU
;
terminated_statement_list : terminated_statement
| terminated_statement_list terminated_statement
;
unterminated_statement_list : unterminated_statement
| terminated_statement_list unterminated_statement
;
terminated_statement : tindakan newline_opt
| Jika '(' expr ')' newline_opt terminated_statement
| Jika '(' expr ')' newline_opt terminated_statement
Lain newline_opt terminated_statement
| Manakala '(' expr ')' newline_opt terminated_statement
| Untuk '(' simple_statement_opt ';'
expr_opt ';' simple_statement_opt ')' newline_opt
penyata_penamatan
| Untuk '(' NAME In NAME ')' newline_opt
penyata_penamatan
| ';' newline_opt
| terminable_statement NEWLINE newline_opt
| terminable_statement ';' newline_opt
;
unterminated_statement : terminated_statement
| Jika '(' expr ')' newline_opt unterminated_statement
| Jika '(' expr ')' newline_opt terminated_statement
Lain newline_opt unterminated_statement
| Manakala '(' expr ')' newline_opt unterminated_statement
| Untuk '(' simple_statement_opt ';'
expr_opt ';' simple_statement_opt ')' newline_opt
pernyataan_tidak ditamatkan
| Untuk '(' NAME In NAME ')' newline_opt
pernyataan_tidak ditamatkan
;
terminable_statement : pernyataan_mudah
| Rehat
| Teruskan
| Seterusnya
| Keluar expr_opt
| Kembali expr_opt
| Lakukan newline_opt terminated_statement While '(' expr ')'
;
simple_statement_opt : /* kosong */
| pernyataan_mudah
;
simple_statement : Padamkan NAME '[' expr_list ']'
| expr
| print_statement
;
print_statement : simple_print_statement
| simple_print_statement output_redirection
;
simple_print_statement : Cetak print_expr_list_opt
| Cetak '(' multiple_expr_list ')'
| Printf print_expr_list
| Printf '(' multiple_expr_list ')'
;
output_redirection : '>' expr
| LAMPIRAN expr
| '|' expr
;
expr_list_opt : /* kosong */
| expr_list
;
expr_list : expr
| senarai_berbilang_expr
;
multiple_expr_list : expr ',' newline_opt expr
| multiple_expr_list ',' newline_opt expr
;
expr_opt : /* kosong */
| expr
;
expr : unary_expr
| bukan_unary_expr
;
unary_expr : '+' expr
| '−' expr
| unary_expr '^' expr
| unary_expr '*' expr
| unary_expr '/' expr
| unary_expr '%' expr
| unary_expr '+' expr
| unary_expr '−' expr
| unary_expr bukan_unary_expr
| unary_expr '<' expr
| unary_expr LE expr
| unary_expr NE expr
| unary_expr EQ expr
| unary_expr '>' expr
| unary_expr GE expr
| unary_expr '~' expr
| unary_expr NO_MATCH expr
| unary_expr Dalam NAME
| unary_expr DAN newline_opt expr
| unary_expr ATAU newline_opt expr
| unary_expr '?' expr ':' expr
| unary_input_function
;
bukan_unary_expr : '(' expr ')'
| '!' expr
| bukan_unary_expr '^' expr
| bukan_unary_expr '*' expr
| bukan_unary_expr '/' expr
| bukan_unary_expr '%' expr
| bukan_unary_expr '+' expr
| bukan_unary_expr '−' expr
| bukan_unary_expr bukan_unary_expr
| bukan_unary_expr '<' expr
| bukan_unary_expr LE expr
| bukan_unary_expr NE expr
| bukan_unary_expr EQ expr
| bukan_unary_expr '>' expr
| bukan_unary_expr GE expr
| bukan_unary_expr '~' expr
| bukan_unary_expr NO_MATCH expr
| bukan_unary_expr Dalam NAME
| '(' multiple_expr_list ')' Dalam NAME
| bukan_unary_expr DAN newline_opt expr
| bukan_unary_expr ATAU newline_opt expr
| bukan_unary_expr '?' expr ':' expr
| NOMBOR
| TALI
| lnilai
| ERE
| lnilai INCR
| lnilai DECR
| nilai INCR
| Nilai DECR
| lnilai POW_ASSIGN expr
| lnilai MOD_ASSIGN expr
| lnilai MUL_ASSIGN expr
| lnilai DIV_ASSIGN expr
| lnilai ADD_ASSIGN expr
| lnilai SUB_ASSIGN expr
| lnilai '=' expr
| FUNC_NAME '(' expr_list_opt ')'
/* tiada ruang putih dibenarkan sebelum '(' */
| BUILTIN_FUNC_NAME '(' expr_list_opt ')'
| BUILTIN_FUNC_NAME
| bukan_unary_input_function
;
print_expr_list_opt : /* kosong */
| print_expr_list
;
print_expr_list : print_expr
| print_expr_list ',' newline_opt print_expr
;
print_expr : unary_print_expr
| bukan_unary_print_expr
;
unary_print_expr : '+' print_expr
| '−' print_expr
| unary_print_expr '^' print_expr
| unary_print_expr '*' print_expr
| unary_print_expr '/' print_expr
| unary_print_expr '%' print_expr
| unary_print_expr '+' print_expr
| unary_print_expr '−' print_expr
| unary_print_expr bukan_unary_print_expr
| unary_print_expr '~' print_expr
| unary_print_expr NO_MATCH print_expr
| unary_print_expr Dalam NAME
| unary_print_expr DAN newline_opt print_expr
| unary_print_expr ATAU newline_opt print_expr
| unary_print_expr '?' print_expr ':' print_expr
;
bukan_unary_print_expr : '(' expr ')'
| '!' print_expr
| bukan_unary_print_expr '^' print_expr
| bukan_unary_print_expr '*' print_expr
| bukan_unary_print_expr '/' print_expr
| bukan_unary_print_expr '%' print_expr
| bukan_unary_print_expr '+' print_expr
| bukan_unary_print_expr '−' print_expr
| bukan_unary_print_expr bukan_unary_print_expr
| bukan_unary_print_expr '~' print_expr
| bukan_unary_print_expr NO_MATCH print_expr
| bukan_unary_print_expr Dalam NAME
| '(' multiple_expr_list ')' Dalam NAME
| bukan_unary_print_expr DAN newline_opt print_expr
| bukan_unary_print_expr ATAU newline_opt print_expr
| bukan_unary_print_expr '?' print_expr ':' print_expr
| NOMBOR
| TALI
| lnilai
| ERE
| lnilai INCR
| lnilai DECR
| nilai INCR
| Nilai DECR
| lnilai POW_ASSIGN print_expr
| lnilai MOD_ASSIGN print_expr
| lnilai MUL_ASSIGN print_expr
| lnilai DIV_ASSIGN print_expr
| lnilai ADD_ASSIGN print_expr
| lnilai SUB_ASSIGN print_expr
| lnilai '=' print_expr
| FUNC_NAME '(' expr_list_opt ')'
/* tiada ruang putih dibenarkan sebelum '(' */
| BUILTIN_FUNC_NAME '(' expr_list_opt ')'
| BUILTIN_FUNC_NAME
;
lnilai : NAMA
| NAMA '[' expr_list ']'
| '$' expr
;
bukan_unary_input_function : simple_get
| simple_get '<' expr
| bukan_unary_expr '|' mudah_dapat
;
unary_input_function : unary_expr '|' mudah_dapat
;
simple_get : GETLINE
| Nilai GETLINE
;
newline_opt : /* kosong */
| newline_opt NEWLINE
;
Tatabahasa ini mempunyai beberapa kesamaran yang harus diselesaikan seperti berikut:
* Keutamaan operator dan persekutuan hendaklah seperti yang diterangkan dalam Jadual 4-1, Ungkapan
in Pengurangan Precedence in awk.
* Sekiranya terdapat kekaburan, an lagi hendaklah dikaitkan dengan yang paling segera sebelum ini
if yang akan memuaskan tatabahasa.
* Dalam beberapa konteks, a ('/') yang digunakan untuk mengelilingi ERE juga boleh menjadi
operator bahagian. Ini hendaklah diselesaikan dengan cara yang mana-mana bahagian
pengendali boleh muncul, a diandaikan sebagai pengendali bahagian. (Tidak ada
operator bahagian unari.)
Setiap ungkapan dalam awk program hendaklah mematuhi peraturan keutamaan dan persekutuan,
walaupun ini tidak diperlukan untuk menyelesaikan kekaburan. Sebagai contoh, kerana '$' mempunyai lebih tinggi
keutamaan daripada '++', rentetan "$x++−−" tidak sah awk ungkapan, walaupun begitu
dihuraikan dengan jelas oleh tatabahasa sebagai "$(x++)−−".
Satu konvensyen yang mungkin tidak jelas dari tatabahasa formal ialah di mana
watak boleh diterima. Terdapat beberapa penempatan yang jelas seperti menamatkan a
pernyataan, dan a boleh digunakan untuk melarikan diri watak antara mana-mana
token leksikal. Sebagai tambahan, watak tanpa watak boleh
ikut koma, pendakap terbuka, logik DAN operator ("&&"), logik ATAU pengendali ("||"),
yang do kata kunci, the lagi kata kunci, dan kurungan penutup an if, khususnya, Atau manakala
penyataan. Sebagai contoh:
{ cetak $ 1,
$2 }
Leksikal konvensyen
Konvensyen leksikal untuk awk program, berkenaan dengan tatabahasa sebelumnya, hendaklah
seperti berikut:
1. Kecuali seperti yang dinyatakan, awk hendaklah mengiktiraf permulaan token atau pembatas terpanjang yang mungkin
pada titik tertentu.
2. Komen hendaklah terdiri daripada mana-mana aksara yang bermula dengan watak
dan ditamatkan oleh, tetapi tidak termasuk kejadian seterusnya, a . Komen hendaklah
tidak mempunyai kesan, kecuali untuk mengehadkan token leksikal.
3. Yang hendaklah diiktiraf sebagai token BARIS BARU.
4. A watak serta-merta diikuti dengan a tidak akan memberi kesan.
5. Tandanya TALI hendaklah mewakili pemalar rentetan. Pemalar rentetan hendaklah bermula dengan
watak '"'. Dalam pemalar rentetan, a watak hendaklah
dianggap untuk memulakan urutan pelarian seperti yang dinyatakan dalam jadual di Pangkalan
Jumlah takrifan POSIX.1‐2008, Bab 5, File format notasi ('\\', '\a', '\b',
'\f', '\ n', '\r', '\t', '\v'). Di samping itu, urutan melarikan diri dalam Jadual 4-2, Melarikan diri
Urutan in awk hendaklah diiktiraf. A tidak akan berlaku dalam rentetan
tetap. Pemalar rentetan hendaklah ditamatkan dengan kejadian pertama yang tidak dapat dielakkan
watak '"' selepas yang memulakan pemalar rentetan. Nilai daripada
rentetan hendaklah menjadi urutan semua aksara dan nilai melarikan diri yang tidak dilepaskan
jujukan antara, tetapi tidak termasuk, dua pembatas '"' watak-watak.
6. Tandanya MASA mewakili pemalar ungkapan biasa lanjutan. Pemalar ERE
hendaklah bermula dengan watak. Dalam pemalar ERE, a
watak hendaklah dianggap untuk memulakan urutan melarikan diri seperti yang dinyatakan dalam jadual dalam
volum Takrif Asas POSIX.1‐2008, Bab 5, File format notasi. dalam
Selain itu, urutan melarikan diri dalam Jadual 4-2, Melarikan diri Urutan in awk sepatut nya
dikenali. Permohonan hendaklah memastikan bahawa a tidak berlaku dalam ERE
tetap. Pemalar ERE hendaklah ditamatkan oleh kejadian pertama yang tidak dapat dielakkan
watak selepas yang memulakan pemalar ERE. Biasa dilanjutkan
ungkapan yang diwakili oleh pemalar ERE hendaklah menjadi urutan semua yang tidak dilepaskan
watak dan nilai urutan pelarian antara, tetapi tidak termasuk, kedua-duanya
membataskan watak.
7. A tidak akan mempunyai kesan, kecuali untuk mengehadkan token leksikal atau dalam TALI or
MASA token.
8. Tandanya NOMBOR hendaklah mewakili pemalar berangka. Bentuk dan nilai berangkanya hendaklah
sama ada bersamaan dengan perpuluhan-terapung-malar token seperti yang ditentukan oleh ISO C
standard, atau ia hendaklah menjadi urutan digit perpuluhan dan hendaklah dinilai sebagai satu
pemalar integer dalam perpuluhan. Di samping itu, pelaksanaan boleh menerima pemalar berangka
dengan bentuk dan nilai berangka yang bersamaan dengan heksadesimal-malar and
heksadesimal-terapung-malar token seperti yang ditentukan oleh standard ISO C.
Jika nilai terlalu besar atau terlalu kecil untuk diwakili (lihat seksyen 1.1.2,
Konsep Berasal dari yang ISO C Standard), tingkah laku tidak ditentukan.
9. Urutan garis bawah, digit dan abjad daripada set aksara mudah alih
(lihat volum Takrif Asas POSIX.1‐2008, seksyen 6.1, Portable Watak
Tetapkan), bermula dengan atau aksara abjad, hendaklah dianggap a
perkataan.
10. Perkataan berikut adalah kata kunci yang akan diiktiraf sebagai token individu; yang
nama token adalah sama dengan kata kunci:
BEGIN memadam AKHIR fungsi in Printf
memecahkan do keluar garis panduan seterusnya pulangan
terus lagi khususnya if cetak manakala
11. Perkataan berikut adalah nama bagi fungsi terbina dalam dan hendaklah diiktiraf sebagai
token BUILTIN_FUNC_NAME:
atan2 gsub log berpecah sub topper
rapat indeks sepadan dengan pecut substrat
cos int rand persegi sistem
exp panjang tanpa srand untuk rendahkan
Kata kunci yang disenaraikan di atas dan nama fungsi terbina dalam dianggap terpelihara
kata-kata.
12. Tandanya NAMA hendaklah terdiri daripada perkataan yang bukan kata kunci atau nama terbina dalam
berfungsi dan tidak diikuti serta merta (tanpa sebarang pembatas) oleh '('
watak.
13. Tandanya FUNC_NAME hendaklah terdiri daripada perkataan yang bukan kata kunci atau nama a
fungsi terbina dalam, diikuti serta-merta (tanpa sebarang pembatas) oleh '(' watak.
. '(' watak tidak boleh dimasukkan sebagai sebahagian daripada token.
14. Urutan dua aksara berikut hendaklah diiktiraf sebagai token yang dinamakan:
-
│Token Nama │ Urutan │ Token Nama │ Urutan │
├───────────┼──────────┼──────┼──────────┼──────┼ ───—․
│ADD_ASSIGN │ += │ TIDAK SETANDING │ !~ │
│SUB_ASSIGN │ −= │ EQ │ == │
│MUL_ASSIGN │ *= │ LE │ <= │
│DIV_ASSIGN │ /= │ GE │ >= │
│MOD_ASSIGN │ %= │ NE │ != │
│POW_ASSIGN │ ^= │ INCR │ ++ │
│OR │ || │ DECR │ −− │
│DAN │ && │ LAMPIRAN │ >> │
└───────────┴──────────┴──────┴──────────┴──────┴──────────┴───────‴
15. Aksara tunggal berikut hendaklah diiktiraf sebagai token yang namanya adalah
watak:
{ } ( ) [ ] , ; + - * % ^ ! > < | ? : " " $ =
Terdapat kekaburan leksikal antara token MASA dan token '/' and DIV_ASSIGN.
Apabila urutan input bermula dengan a watak dalam mana-mana konteks sintaksis di mana
token '/' or DIV_ASSIGN boleh muncul sebagai token seterusnya dalam program yang sah, lebih lama daripada
dua token yang boleh diiktiraf hendaklah diiktiraf. Dalam mana-mana sintaksis lain
konteks di mana token MASA boleh muncul sebagai token seterusnya dalam program yang sah, token
MASA hendaklah diiktiraf.
EXIT STATUS
Nilai keluar berikut hendaklah dikembalikan:
0 Semua fail input telah berjaya diproses.
>0 Ralat telah berlaku.
Status keluar boleh diubah dalam program dengan menggunakan a keluar ungkapan.
AKIBAT OF KESALAHAN
Jika ada fail operan ditentukan dan fail bernama tidak boleh diakses, awk hendaklah menulis a
mesej diagnostik kepada ralat standard dan tamatkan tanpa sebarang tindakan lanjut.
Jika program ditentukan oleh sama ada program operan atau a progfile operan bukan a
sah awk atur cara (seperti yang dinyatakan dalam bahagian PENERANGAN EXTENDED), tingkah lakunya ialah
tidak ditentukan.
. berikutan bahagian adalah bermaklumat.
PERMOHONAN PENGGUNAAN
. indeks, panjang, sepadan dengan, dan substrat fungsi tidak boleh dikelirukan dengan yang serupa
fungsi dalam piawaian ISO C; yang awk versi berurusan dengan aksara, manakala ISO C
tawaran standard dengan bait.
Kerana operasi penggabungan diwakili oleh ungkapan bersebelahan dan bukannya an
pengendali eksplisit, selalunya perlu menggunakan kurungan untuk menguatkuasakan yang sepatutnya
keutamaan penilaian.
CONTOH
. awk program yang dinyatakan dalam baris arahan paling mudah ditentukan dalam satu-
petikan (contohnya, 'program') untuk aplikasi menggunakan sh, Kerana awk program biasa
mengandungi aksara yang istimewa kepada cangkerang, termasuk petikan berganda. Dalam kes-kes
di mana sebuah awk program mengandungi aksara petikan tunggal, ia biasanya paling mudah untuk ditentukan
kebanyakan program sebagai rentetan dalam petikan tunggal yang digabungkan oleh shell dengan petikan
aksara petikan tunggal. Sebagai contoh:
awk '/'\''/ { cetak "petikan:", $0 }'
mencetak semua baris daripada input standard yang mengandungi aksara petikan tunggal, diawali
bersama memetik:.
Berikut adalah contoh mudah awk program:
1. Tulis kepada output standard semua baris input yang medan 3 lebih besar daripada 5:
$3 > 5
2. Tulis setiap baris kesepuluh:
(NR % 10) == 0
3. Tulis sebarang baris dengan subrentetan yang sepadan dengan ungkapan biasa:
/(G|D)(2[0−9][[:alfa:]]*)/
4. Cetak mana-mana baris dengan subrentetan yang mengandungi a 'G' or 'D', diikuti dengan urutan
digit dan aksara. Contoh ini menggunakan kelas aksara digit and alfa untuk perlawanan
digit bebas bahasa dan aksara abjad masing-masing:
/(G|D)([[:digit:][:alfa:]]*)/
5. Tulis mana-mana baris di mana medan kedua sepadan dengan ungkapan biasa dan keempat
bidang tidak:
$2 " " /xyz/ && $4 ! " " /xyz/
6. Tulis mana-mana baris di mana medan kedua mengandungi a :
$2 " " /\\/
7. Tulis mana-mana baris di mana medan kedua mengandungi a . Perhatikan bahawa
-melarikan diri ditafsirkan dua kali; sekali dalam pemprosesan leksikal rentetan
dan sekali dalam memproses ungkapan biasa:
$2 " " "\\\\"
8. Tulis medan kedua hingga terakhir dan terakhir dalam setiap baris. Pisahkan medan dengan a
:
{OFS=":";cetak $(NF−1), $NF}
9. Tulis nombor baris dan bilangan medan dalam setiap baris. Tiga tali
mewakili nombor baris, the , dan bilangan medan digabungkan
dan rentetan itu ditulis kepada output standard:
{cetak NR "" NF}
10. Tulis baris lebih panjang daripada 72 aksara:
panjang ($0) > 72
11. Tulis dua medan pertama dalam susunan bertentangan dipisahkan oleh FSO:
{ cetak $ 2, $1 }
12. Sama, dengan medan input dipisahkan dengan a atau dan watak, atau
kedua-duanya:
BEGIN { FS = ",[ \t]*|[ \t]+" }
{ cetak $ 2, $1 }
13. Tambahkan lajur pertama, jumlah cetak dan purata:
{s += $1 }
AKHIR {cetak "jumlah is ", s, " purata ialah", s/NR}
14. Tulis medan dalam susunan terbalik, satu setiap baris (banyak baris keluar untuk setiap baris masuk):
{ khususnya (i = NF; i > 0; −−i) cetak $i }
15. Tulis semua baris antara kejadian rentetan permulaan and berhenti:
/mula/, /berhenti/
16. Tulis semua baris yang medan pertamanya berbeza daripada yang sebelumnya:
$1 != prev { mencetak; prev = $1 }
17. Simulasi echo:
BEGIN {
khususnya (i = 1; i < ARGC; ++i)
printf("%s%s", ARGV[i], i=ARGC−1?"\n":" ")
}
18. Tulis awalan laluan yang terkandung dalam PATH pembolehubah persekitaran, satu setiap baris:
BEGIN {
n = berpecah (PERSEKITARAN["PATH"], jalan, ":")
khususnya (i = 1; i <= n; ++i)
cetak laluan [i]
}
19. Jika ada fail bernama input mengandungi pengepala halaman borang: Halaman #
dan fail bernama program yang mengandungi:
/Halaman/ { $2 = n++; }
{ cetak }
kemudian baris arahan:
awk −f program n = 5 input
mencetak fail input, mengisi nombor halaman bermula dari 5.
RATIONALE
Penerangan ini adalah berdasarkan yang baharu awk, ``nawk'', (lihat rujukan . AWK
Pengaturcaraan Bahasa), yang memperkenalkan beberapa ciri baharu kepada sejarah awk:
1. Kata kunci baharu: memadam, do, fungsi, pulangan
2. Fungsi terbina dalam baharu: atan2, rapat, cos, gsub, sepadan dengan, rand, tanpa, srand, sub, sistem
3. Pembolehubah pratakrif baharu: FNR, ARGC, ARGV, MULAKAN, RLENGTH, SUBSEP
4. Pengendali ungkapan baharu: ?, :, ,, ^
5. The FS pembolehubah dan hujah ketiga kepada berpecah, kini dianggap sebagai lanjutan biasa
ungkapan.
6. Keutamaan pengendali, ditukar kepada lebih hampir sepadan dengan bahasa C. Dua contoh
kod yang beroperasi secara berbeza ialah:
manakala ( n /= 10 > 1) ...
if (!"wk" ~ /bwk/) ...
Beberapa ciri telah ditambah berdasarkan pelaksanaan yang lebih baru awk:
* Berbilang contoh −f progfile dibenarkan.
* Pilihan baharu −v tugasan.
* Pembolehubah pratakrif baharu ALAM SEKITAR.
* Fungsi terbina dalam baharu topper and untuk rendahkan.
* Lebih banyak keupayaan pemformatan ditambahkan pada Printf untuk memadankan standard ISO C.
Keseluruhannya awk sintaks sentiasa berdasarkan bahasa C, dengan beberapa ciri daripada
bahasa arahan shell dan sumber lain. Kerana ini, ia tidak sepenuhnya
serasi dengan mana-mana bahasa lain, yang telah menyebabkan kekeliruan bagi sesetengah pengguna. Bukan
niat pembangun standard untuk menangani isu tersebut. Beberapa agak kecil
perubahan ke arah menjadikan bahasa lebih serasi dengan standard ISO C telah dibuat; paling
daripada perubahan ini adalah berdasarkan perubahan serupa dalam pelaksanaan terkini, seperti yang diterangkan
atas. Masih terdapat beberapa konvensyen bahasa C yang tidak ada awk. Salah satu daripada
yang ketara ialah operator, yang biasanya digunakan untuk menentukan berbilang
ungkapan dalam bahasa C khususnya kenyataan. Juga, terdapat pelbagai tempat di mana awk is
lebih ketat daripada bahasa C mengenai jenis ungkapan yang boleh digunakan dalam
konteks yang diberikan. Had ini adalah disebabkan oleh ciri-ciri berbeza yang awk bahasa
memang menyediakan.
Ungkapan biasa dalam awk telah dilanjutkan sedikit daripada pelaksanaan sejarah kepada
menjadikannya superset tulen bagi ungkapan tetap lanjutan, seperti yang ditakrifkan oleh POSIX.1‐2008 (lihat
volum Takrif Asas POSIX.1‐2008, seksyen 9.4, Extended Biasa Ungkapan).
Sambungan utama ialah ciri pengantarabangsaan dan ungkapan selang. Bersejarah
pelaksanaan daripada awk telah lama menyokong -urutan melarikan diri sebagai lanjutan kepada
ungkapan tetap lanjutan, dan sambungan ini telah dikekalkan walaupun tidak konsisten
dengan utiliti lain. Bilangan jujukan pelarian yang diiktiraf dalam kedua-dua tetapan lanjutan
ungkapan dan rentetan telah berubah-ubah (biasanya meningkat mengikut masa) antara pelaksanaan.
Set yang ditentukan oleh POSIX.1‐2008 termasuk kebanyakan jujukan yang diketahui disokong oleh popular
pelaksanaan dan mengikut piawaian ISO C. Satu urutan yang tidak disokong ialah
nilai heksadesimal terlepas bermula dengan '\x'. Ini akan membolehkan nilai dinyatakan dalam lebih banyak lagi
daripada 9 bit untuk digunakan dalam awk seperti dalam piawaian ISO C. Walau bagaimanapun, kerana sintaks ini
mempunyai panjang bukan deterministik, ia tidak membenarkan aksara seterusnya menjadi a
digit heksadesimal. Had ini boleh ditangani dalam bahasa C dengan menggunakan
penyatuan rentetan leksikal. Di dalam awk bahasa, penggabungan juga boleh menjadi penyelesaian
untuk rentetan, tetapi bukan untuk ungkapan biasa lanjutan (sama ada token ERE leksikal atau
rentetan yang digunakan secara dinamik sebagai ungkapan biasa). Kerana had ini, ciri
belum ditambah ke POSIX.1‐2008.
Apabila pembolehubah rentetan digunakan dalam konteks di mana ungkapan tetap lanjutan biasanya
muncul (di mana token leksikal ERE digunakan dalam tatabahasa) rentetan tidak mengandungi
yang tersurat watak.
Beberapa versi awk benarkan borang:
func nama(args, ... ) { kenyataan }
Ini telah ditamatkan oleh pengarang bahasa itu, yang meminta supaya ia tidak berlaku
dinyatakan.
Pelaksanaan sejarah bagi awk menghasilkan ralat jika a seterusnya pernyataan dilaksanakan dalam a
BEGIN tindakan, dan sebab awk untuk menamatkan jika a seterusnya pernyataan dilaksanakan dalam an AKHIR tindakan.
Tingkah laku ini tidak didokumenkan, dan tidak dipercayai bahawa ia perlu
menyeragamkannya.
Spesifikasi penukaran antara nilai rentetan dan angka adalah lebih terperinci
daripada dalam dokumentasi pelaksanaan sejarah atau dalam rujukan . AWK
Pengaturcaraan Bahasa. Walaupun kebanyakan tingkah laku direka untuk menjadi intuitif,
butiran adalah perlu untuk memastikan tingkah laku yang serasi daripada pelaksanaan yang berbeza. ini
adalah penting terutamanya dalam ungkapan hubungan kerana jenis operan
tentukan sama ada rentetan atau perbandingan berangka dilakukan. Dari perspektif an
pembangun aplikasi, ia biasanya mencukupi untuk mengharapkan tingkah laku intuitif dan memaksa
penukaran (dengan menambah sifar atau menggabungkan rentetan nol) apabila jenis ungkapan
jelas tidak sepadan dengan apa yang diperlukan. Tujuannya adalah untuk menentukan sejarah
amalan dalam hampir semua kes. Satu pengecualian ialah, dalam pelaksanaan sejarah,
pembolehubah dan pemalar mengekalkan nilai rentetan dan angka selepas nilai asalnya
ditukar dengan sebarang kegunaan. Ini bermakna merujuk kepada pembolehubah atau pemalar boleh mempunyai
kesan sampingan yang tidak dijangka. Sebagai contoh, dengan pelaksanaan sejarah perkara berikut
program:
{
a = "+2"
b = 2
if (NR % 2)
c = a + b
if (a == b)
cetak "nombor perbandingan"
lagi
cetak "tali perbandingan"
}
akan melakukan perbandingan berangka (dan perbandingan berangka keluaran) untuk setiap nombor ganjil
baris, tetapi lakukan perbandingan rentetan (dan perbandingan rentetan output) untuk setiap genap-
garis bernombor. POSIX.1‐2008 memastikan bahawa perbandingan akan berbentuk angka jika perlu. Dengan
pelaksanaan sejarah, program berikut:
BEGIN {
OFMT = "%e"
cetak 3.14
OFMT = "%f"
cetak 3.14
}
akan mengeluarkan "3.140000e+00" dua kali, kerana pada yang kedua cetak penyataan pemalar
"3.14" akan mempunyai nilai rentetan daripada penukaran sebelumnya. POSIX.1‐2008 memerlukan itu
keluaran kedua cetak kenyataan menjadi "3.140000". Tingkah laku sejarah
pelaksanaan dilihat sebagai terlalu tidak intuitif dan tidak dapat diramalkan.
Telah dinyatakan bahawa dengan peraturan yang terkandung dalam draf awal, skrip berikut
tidak akan mencetak apa-apa:
BEGIN {
y[1.5] = 1
OFMT = "%e"
cetak y[1.5]
}
Oleh itu, pembolehubah baru, CONVFMT, telah diperkenalkan. The OFMT pembolehubah kini terhad kepada
mempengaruhi penukaran output nombor kepada rentetan dan CONVFMT digunakan untuk dalaman
penukaran, seperti perbandingan atau pengindeksan tatasusunan. Nilai lalai adalah sama seperti itu
khususnya OFMT, jadi melainkan program berubah CONVFMT (yang tiada program sejarah akan lakukan), ia
akan menerima gelagat sejarah yang dikaitkan dengan penukaran rentetan dalaman.
POSIX awk konvensyen leksikal dan sintaksis dinyatakan secara lebih formal berbanding yang lain
sumber. Sekali lagi niatnya adalah untuk menentukan amalan sejarah. Satu konvensyen yang mungkin
tidak jelas dari tatabahasa formal seperti dalam huraian lisan yang lain adalah di mana
watak boleh diterima. Terdapat beberapa penempatan yang jelas seperti menamatkan a
pernyataan, dan a boleh digunakan untuk melarikan diri watak antara mana-mana
token leksikal. Sebagai tambahan, watak tanpa watak boleh
ikut koma, pendakap terbuka, operator logik DAN ("&&"), operator OR logik
("||"), do kata kunci, the lagi kata kunci, dan kurungan penutup an if, khususnya, Atau
manakala penyataan. Sebagai contoh:
{ cetak $ 1,
$2 }
Keperluan itu awk tambah ketinggalan kepada teks hujah atur cara adalah untuk
memudahkan tatabahasa, menjadikannya sepadan dengan fail teks dalam bentuk. Tidak ada cara untuk
aplikasi atau suite ujian untuk menentukan sama ada literal ditambah atau sama ada awk
hanya bertindak seolah-olah ia berlaku.
POSIX.1‐2008 memerlukan beberapa perubahan daripada pelaksanaan sejarah untuk menyokong
pengantarabangsaan. Mungkin yang paling halus daripada ini ialah penggunaan titik perpuluhan
watak, ditakrifkan oleh LC_NUMERIC kategori tempat, dalam perwakilan
nombor titik terapung. Aksara khusus tempatan ini digunakan dalam mengenal pasti angka
input, dalam menukar antara rentetan dan nilai angka, dan dalam pemformatan output.
Walau bagaimanapun, tanpa mengira tempat, the aksara (aksara titik perpuluhan bagi
POSIX locale) ialah aksara titik perpuluhan yang diiktiraf dalam pemprosesan awk program
(termasuk tugasan dalam hujah baris arahan). Ini pada asasnya konvensyen yang sama
seperti yang digunakan dalam piawaian ISO C. Perbezaannya ialah bahasa C termasuk
setlocale() fungsi, yang membenarkan aplikasi mengubah suai tempatnya. Disebabkan ini
keupayaan, aplikasi C mula melaksanakan dengan tempatnya ditetapkan ke tempat C, dan hanya
dilaksanakan dalam tempat yang ditentukan persekitaran selepas panggilan eksplisit kepada setlocale,
Walau bagaimanapun, menambah ciri baharu yang begitu rumit pada awk bahasa dilihat sebagai
tidak sesuai untuk POSIX.1‐2008. Ia adalah mungkin untuk melaksanakan a awk program secara eksplisit dalam mana-mana
setempat yang dikehendaki dengan menetapkan persekitaran dalam cangkerang.
Tingkah laku yang tidak ditentukan yang terhasil daripada NUL dalam ungkapan tetap lanjutan membolehkan masa hadapan
sambungan untuk GNU hinggap program untuk memproses data binari.
Tingkah laku dalam kes tidak sah awk program (termasuk leksikal, sintaksis, dan
ralat semantik) tidak ditentukan kerana ia dianggap terlalu mengehadkan pelaksanaan
untuk menentukan. Dalam kebanyakan kes ralat sedemikian boleh dijangka menghasilkan diagnostik dan bukan
status keluar sifar. Walau bagaimanapun, sesetengah pelaksanaan boleh memilih untuk melanjutkan bahasa dengan cara
yang menggunakan binaan tidak sah tertentu. Konstruk tidak sah lain mungkin dianggap
patut diberi amaran, tetapi sebaliknya menyebabkan beberapa tingkah laku yang munasabah. Masih binaan lain
mungkin sangat sukar untuk dikesan dalam sesetengah pelaksanaan. Juga, pelaksanaan yang berbeza
mungkin mengesan ralat yang diberikan semasa penghuraian awal program (sebelum membaca sebarang
fail input) manakala yang lain mungkin mengesannya apabila melaksanakan program selepas membaca beberapa
input. Pelaksana harus sedar bahawa mendiagnosis ralat seawal mungkin dan
menghasilkan diagnostik yang berguna boleh memudahkan penyahpepijatan aplikasi, dan dengan itu membuat
pelaksanaan lebih boleh digunakan.
Tingkah laku yang tidak ditentukan daripada menggunakan berbilang aksara RS nilai adalah untuk membolehkan masa depan yang mungkin
sambungan berdasarkan ungkapan biasa lanjutan yang digunakan untuk pemisah rekod. Bersejarah
pelaksanaan mengambil aksara pertama rentetan dan mengabaikan yang lain.
Tingkah laku yang tidak ditentukan apabila berpecah(rentetan,pelbagai, ) digunakan adalah untuk membenarkan masa depan yang dicadangkan
sambungan yang akan memisahkan rentetan kepada pelbagai aksara individu.
Dalam konteks itu garis panduan fungsi, hujah yang sama baik untuk keutamaan yang berbeza
daripada | and < operator boleh dibuat. Amalan sejarah ialah:
garis panduan < "a" "b"
dihuraikan sebagai:
( garis panduan < "a" ) "b"
walaupun ramai yang berpendapat bahawa tujuannya ialah fail itu ab patut dibaca. Walau bagaimanapun:
garis panduan < "x" + 1
menghuraikan sebagai:
garis panduan < ( "x" + 1 )
Masalah yang sama berlaku dengan | versi garis panduan, terutamanya dalam kombinasi dengan $.
Sebagai contoh:
$"gema hai" | garis panduan
(Keadaan ini amat bermasalah apabila digunakan dalam a cetak penyataan, di mana
|getline sebahagiannya mungkin pengalihan semula cetak.)
Oleh kerana dalam kebanyakan kes, binaan sedemikian tidak (atau sekurang-kurangnya tidak sepatutnya) digunakan (kerana mereka
mempunyai kesamaran semula jadi yang tidak ada penghuraian konvensional), maksudnya
binaan telah dibuat secara eksplisit tidak ditentukan. (Kesannya ialah pematuhan
aplikasi yang menghadapi masalah mesti dalam kurungan untuk menyelesaikan kekaburan.) Di sana
nampaknya hanya sedikit jika ada penggunaan sebenar bagi binaan tersebut.
Tatabahasa boleh ditulis yang akan menyebabkan ralat dalam keadaan ini. di mana
keserasian ke belakang bukanlah pertimbangan yang besar, pelaksana mungkin ingin menggunakannya
tatabahasa.
Beberapa pelaksanaan sejarah telah membenarkan beberapa fungsi terbina dalam dipanggil tanpa
senarai hujah, hasilnya ialah senarai hujah lalai yang dipilih dalam beberapa ``munasabah''
cara. Penggunaan panjang sebagai sinonim untuk panjang ($0) adalah satu-satunya bentuk ini
dianggap dikenali secara meluas atau digunakan secara meluas; borang khusus ini didokumenkan dalam pelbagai
tempat (contohnya, kebanyakan sejarah awk halaman rujukan, walaupun tidak dalam rujukan
. AWK Pengaturcaraan Bahasa) sebagai amalan yang sah. Dengan pengecualian ini, lalai
senarai hujah sentiasa tidak didokumenkan dan ditakrifkan secara samar-samar, dan ia tidak sama sekali
jelaskan bagaimana (atau jika) ia harus digeneralisasikan kepada fungsi yang ditentukan pengguna. Mereka menambah tidak berguna
kefungsian dan menghalang kemungkinan sambungan masa hadapan yang mungkin perlu menamakan fungsi
tanpa memanggil mereka. Tidak menyeragamkan mereka nampaknya kursus paling mudah. Piawaian
pemaju menganggap itu panjang mendapat layanan istimewa, walau bagaimanapun, kerana ia telah
didokumenkan pada masa lalu dan melihat kemungkinan penggunaan yang besar dalam program sejarah.
Sehubungan itu, penggunaan ini telah dibuat sah, tetapi Isu 5 mengeluarkan penggunaan yang usang
penandaan untuk pelaksanaan yang mematuhi XSI dan banyak aplikasi yang mematuhi sebaliknya
bergantung pada ciri ini.
In sub and gsub, Jika pengganti ialah rentetan literal (token leksikal TALI), kemudian dua
berturut-turut aksara harus digunakan dalam rentetan untuk memastikan satu
akan mendahului apabila rentetan terhasil dihantar ke
fungsi. (Sebagai contoh, untuk menentukan satu literal dalam rentetan gantian, gunakan
gsub(MASA, "\\&").)
Dari segi sejarah, satu-satunya watak istimewa dalam pengganti hujah mengenai sub and gsub rentetan
fungsi adalah ('&') watak dan mendahuluinya dengan
watak digunakan untuk mematikan makna istimewanya.
Penerangan dalam piawaian ISO POSIX‐2:1993 memperkenalkan tingkah laku sedemikian rupa sehingga
watak adalah satu lagi watak istimewa dan ia tidak dinyatakan sama ada terdapat
adalah mana-mana watak istimewa lain. Penerangan ini memperkenalkan beberapa kemudahalihan
masalah, beberapa daripadanya diterangkan di bawah, dan oleh itu ia telah digantikan dengan yang lebih
huraian sejarah. Beberapa masalah termasuk:
* Dari segi sejarah, untuk mencipta rentetan gantian, skrip boleh digunakan gsub(MASA, "\\&"),
tetapi dengan perkataan standard ISO POSIX‐2:1993, adalah perlu untuk digunakan gsub(MASA,
"\\\\&"). The aksara digandakan di sini kerana semua literal rentetan adalah
tertakluk kepada analisis leksikal, yang akan mengurangkan setiap pasangan watak ke
bujang sebelum diserahkan kepada gsub.
* Oleh kerana ia tidak dinyatakan apakah aksara khas itu, untuk skrip mudah alih
menjamin bahawa aksara dicetak secara literal, setiap aksara perlu didahulukan
dengan . (Sebagai contoh, skrip mudah alih terpaksa digunakan gsub(MASA, "\\h\\i") Untuk
menghasilkan rentetan penggantian "hai".)
Penerangan untuk perbandingan dalam piawaian ISO POSIX‐2:1993 tidak menerangkan dengan betul
amalan sejarah kerana cara rentetan berangka dibandingkan sebagai nombor. The
peraturan semasa menyebabkan kod berikut:
if (0 == "000")
cetak "pelik, tetapi benar"
lagi
cetak "bukan benar"
untuk melakukan perbandingan berangka, menyebabkan if untuk berjaya. Ia sepatutnya jelas secara intuitif
bahawa ini adalah tingkah laku yang tidak betul, dan sememangnya, tiada pelaksanaan sejarah awk sebenarnya
berkelakuan begini.
Untuk menyelesaikan masalah ini, definisi angka rentetan telah dipertingkatkan untuk memasukkan hanya mereka
nilai yang diperoleh daripada keadaan tertentu (kebanyakannya sumber luaran) di mana ia tidak
mungkin untuk menentukan dengan jelas sama ada nilai itu bertujuan untuk menjadi rentetan atau a
angka.
Pembolehubah yang diperuntukkan kepada rentetan angka juga akan dianggap sebagai rentetan angka.
(Sebagai contoh, tanggapan rentetan angka boleh disebarkan merentasi tugasan.) Dalam
perbandingan, semua pembolehubah yang mempunyai nilai yang tidak diinisialisasikan akan dianggap sebagai angka
operan menilai kepada nilai berangka sifar.
Pembolehubah yang tidak dimulakan termasuk semua jenis pembolehubah termasuk skalar, elemen tatasusunan,
dan padang. Takrif nilai yang tidak dimulakan dalam Pembolehubah and khas Pembolehubah is
perlu untuk menerangkan nilai yang diletakkan pada pembolehubah tidak diinisialisasi dan pada medan yang
sah (contohnya, < $NF) tetapi tidak mempunyai watak di dalamnya dan untuk menerangkan bagaimana ini
pembolehubah hendaklah digunakan dalam perbandingan. Medan yang sah, seperti $1, yang tidak mempunyai aksara
di dalamnya boleh diperolehi daripada baris input daripada "\t\t" apabila FS='\t'. Dari segi sejarah,
perbandingan ($110) dilakukan secara numerik selepas menilai $1 kepada nilai sifar.
Frasa ``... juga hendaklah mempunyai nilai berangka rentetan angka'' telah dialih keluar
daripada beberapa bahagian piawaian ISO POSIX‐2:1993 kerana ia menetapkan yang tidak perlu
perincian pelaksanaan. Ia tidak perlu untuk POSIX.1‐2008 untuk menentukan bahawa objek ini
diberikan dua nilai yang berbeza. Ia hanya perlu untuk menentukan bahawa objek ini boleh
menilai kepada dua nilai berbeza bergantung pada konteks.
Pelaksanaan sejarah bagi awk tidak menghuraikan integer heksadesimal atau pemalar terapung
seperti "0xa" and "0xap0". Disebabkan oleh kesilapan, edisi 2001 hingga 2004 ini
sokongan standard yang diperlukan untuk pemalar terapung heksadesimal. Ini disebabkan oleh
merujuk kepada atof(). Versi standard ini membenarkan tetapi tidak memerlukan
pelaksanaan untuk digunakan atof() dan termasuk penerangan tentang bagaimana nombor titik terapung
diiktiraf sebagai alternatif untuk memadankan tingkah laku bersejarah. Tujuan perubahan ini adalah untuk
membenarkan pelaksanaan mengenali pemalar titik terapung mengikut sama ada
Piawaian ISO/IEC 9899:1990 atau piawaian ISO/IEC 9899:1999, dan untuk membenarkan (tetapi tidak memerlukan)
pelaksanaan untuk mengenali pemalar integer heksadesimal.
Pelaksanaan sejarah bagi awk tidak menyokong infiniti titik terapung dan masuk NaN
angka tali; contohnya, "−INF" and "NaN". Walau bagaimanapun, pelaksanaan yang menggunakan atof() atau
strtod() berfungsi untuk melakukan penukaran mengambil sokongan untuk nilai ini jika ia menggunakan a
ISO/IEC 9899:1999 versi standard fungsi dan bukannya standard ISO/IEC 9899:1990
versi. Disebabkan oleh kesilapan, edisi 2001 hingga 2004 piawaian ini tidak
benarkan sokongan untuk infiniti dan NaN, tetapi dalam semakan ini sokongan dibenarkan (tetapi tidak
diperlukan). Ini adalah perubahan senyap kepada tingkah laku awk program; sebagai contoh, dalam
POSIX menempatkan ungkapan:
("-INF" + 0 < 0)
dahulunya mempunyai nilai 0 kerana "−INF" ditukar kepada 0, tetapi kini ia mungkin mempunyai nilai 0 atau
1.
MASA HADAPAN ARAHAN
Tiada.
Gunakan awkposix dalam talian menggunakan perkhidmatan onworks.net