Sinau perintah Linux - gawk

Jeneng

gawk - pola pemindaian lan pemrosesan basa

Sinopsis

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

pgawk [ opsi POSIX utawa GNU] -f program-file [ - ] berkas ...
pgawk [ opsi POSIX utawa GNU] [ - ] file teks ...

Gambaran

Gawk minangka implementasine saka Proyek GNK ing basa pamrograman AWK. Iki cocog karo definisi basa ing POSIX 1003.2 Command Language lan Utilities Standard. Versi iki uga adhedhasar katrangan ing AWK Programming Language , dening Aho, Kernighan, lan Weinberger, kanthi fitur tambahan sing ana ing versi System V Release 4 saka UNIX. Gawk uga nyedhiyakake tambahan anyar Laboratorium Bell Laboratories, lan sawetara ekstensi khusus GNU.

Pawk minangka pandhuan profiling. Iku identik ing kabeh cara kanggo gawk , kejaba program luwih alon, lan kanthi otomatis ngasilake profil eksekusi ing file awkprof.out nalika rampung. Waca --profile pilihan, ing ngisor iki.

Sabanjure baris komplit kasebut yaiku pilihan kanggo gawk dhewe, teks program AWK (yen ora diwenehake liwat opsi -f utawa --file ), lan angka sing bakal kasedhiya ing ARGV lan ARGV sing wis ditemtokake variabel AWK.

Format pilihan

Pilihan Gawk bisa dadi salah siji opsi POSIX tradisional, utawa opsi longgar gaya GNU. Pilihan POSIX diwiwiti kanthi siji `` - '', nalika opsi sing dawa diwiwiti kanthi `` - ''. Opsi sing lawas disedhiyakake kanggo fitur-fitur khusus GNU lan fitur-fitur sing didhukung POSIX.

Sawise standar POSIX, opsi khusus gawat diwenehake liwat argumen menyang opsi -W . Opsi multi- W uga diwenehake Saben -W opsi nduweni opsi sing cocog, kayata rinci ing ngisor iki. Bebungah kanggo opsi sing dawa bakal digabung karo opsi kanthi tanda = , tanpa spasi intervensi, utawa bisa diwenehake ing argumen baris perintah sabanjure. Opsi sing dawa bisa disingkat, anggere singkatan tetep unik.

Pilihan

Gawk nampa opsi iki, sing kacathet sacara abjad.

-F fs

--Filter-separator fs Gunakake fs kanggo pemisah kolom input (nilai saka variabel sing wis ditemtokake FS ).

-v var = val

--assign var = val Nglebokake val nilai menyang var variabel, sadurunge eksekusi program diwiwiti. Nilai-nilai variabel kasebut kasedhiya ing pamblokiran BEGIN saka program AWK.

-f program-file

--file program-file Maca sumber program AWK saka berkas file -file , tinimbang saka argumen baris perintah pertama. Opsi -f (utawa --file ) bisa digunakake.

-mf NNN

-mr NNN Ngatur macem-macem watesan memori menyang NNN Nilai. Bendera f nampilake kolom maksimum, lan bendera r nyetel ukuran rekaman maksimum. Iki loro bendera lan pilihan -m saka Laboratories versi riset UNIX awk . Padha ora digathekake dening gawk , amarga gawk ora ana watesan sing wis ditemtokake.

-W kompat

-W tradisional

- kompatibel

--Streaming ing mode kompatibilitas . Ing mode kompatibilitas, gawk dumadi saka identik UNIX ; ora ana ekstensi spesifik GNU sing diakoni. Panggunaan --traditional luwih disengaja liwat wangun liya saka pilihan iki. Waca GNU EXTENSIONS , ing ngisor iki kanggo informasi liyane.

-W copyleft

-W hak cipta

- copyleft

- versi hak cipta Nyetak versi singkat pesen informasi hak cipta GNU ing output standar lan metu saka kasil.

-W dump-variabel [ = file ]

--dump-variables [ = file ] Nyunting dhaptar variabel global sing diurut, tipe lan nilai final sing ditrapake. Yen ora ana berkas sing diwenehake, gawk nggunakake file sing dijenengi awkvars.out ing direktori sing saiki.

Duwe dhaptar kabeh variabel global minangka cara sing apik kanggo golek kasalahan panulisan ing program sampeyan. Sampeyan uga bakal nggunakake pilihan iki yen sampeyan duwe program gedhe kanthi akeh fungsi, lan sampeyan pengin nggawe manawa fungsi sampeyan ora kanthi ora sengaja nggunakake variabel global sing temenan lokal. (Iki minangka kesalahan sing gampang banget kanggo nggawe jeneng variabel prasaja kaya i , j , lan sateruse.)

-W bantuan

-W usage

--Takon

--anggep nyetak ringkesan sing ringkih saka opsi sing kasedhiya ing output standar. (Saben standar GNU Coding , opsi kasebut nyebabake metu langsung langsung.)

-W lint [ = fatal ]

--lint [ = nyebabake nyiksa ] Nyedhiyani bebaya babagan mbangun sing ragu-ragu utawa non-portabel kanggo implementasi otherAWK. Kanthi argumen opsional, bejat perang bisa dadi kasalahan sing mbrontak. Iki bisa dadi drastis, nanging panggunaan kasebut mesthi bakal ngrembug pangembangan program-program AWK resik.

-W serat-lawas

- wolung taun Nyedhiyani bebaya babagan mbangun sing dudu portabel kanggo versi asli Unix.

-W gen-po

--gen-po Scan lan parse program AWK, lan generate file format GNU .po ing output standar karo entri kanggo kabeh strings localizable ing program. Program kasebut ora dieksekusi. Waca distribusi gettext GNU kanggo informasi luwih lengkap babagan file .po .

-W non-desimal data

--non-decimal-data Ngenali nilai octal lan hexadecimal ing data input. Gunakake pilihan iki kanthi ati-ati!

-W posix

--posix Iki dadi mode kompatibilitas , kanthi batasan tambahan ing ngisor iki:

*

\ x uwal urutan ora diakoni.

*

Mung spasi lan tab tumindak minangka pamisah kolom nalika FS disetel menyang spasi tunggal, garis anyar ora.

*

Sampeyan ora bisa nerusake baris sawise ? lan :.

*

Fon sinonim kanggo fungsi tembung kunci ora dikenali.

*

Operator kasebut ** lan ** = ora bisa digunakake ing panggonan ^ lan ^ = .

*

Fungsi fflush () ora kasedhiya.

-W profile [ = prof_file ]

--profile [ = prof_file ] Kirim data profiling kanggo prof_file . Default punika awkprof.out . Nalika mbukak karo gawk , profil mung minangka `` cantik dicithak '' versi program. Nalika mbukak karo pgawk , profil ngandhut eksekusi saka saben statement ing program ing sisih kiwa lan fungsi diarani pangguna kanggo saben fungsi sing didéfinisi pengguna.

-W maneh interval

--re-interval Ngaktifake ekspresi interval kanthi pencocokan ekspresi reguler (waca Regular Expressions , ing ngisor iki). Ekspansi interval ora sacara tradhisional ditemokake ing basa AWK. Standar POSIX nambahake, kanggo nggawe awk lan egrep sing saling konsisten. Nanging, pamakean kasebut cenderung kanggo ngilangi program AWK lawas, supaya gawk mung menehi wong-wong mau yen diwajibake karo pilihan iki, utawa nalika - pajanan kasebut tinulis .

-W sumber program-teks

- Program teks sumber Gunakake program teks minangka kode sumber program AWK. Opsi iki ngidini intermixing fungsi perpustakaan sing gampang (digunakake liwat opsi -f lan - file ) karo kode sumber sing dipasrahake ing baris perintah. Iki dimaksudkan utamane kanggo medium gedhe kanggo program AWK sing digunakake ing skrip shell.

-W versi

--Version Informasi versi cetak kanggo salinan gawk tartamtu ing output standar. Iki migunani utamané kanggo mangerteni yen salinan gawk saiki ing sistem sampeyan anyar nganti apa wae sing didistribusekake dening Free Software Foundation. Iki uga migunani nalika nglaporake bug. (Saben standar GNU Coding , opsi kasebut nyebabake metu langsung langsung.)

- Sinyal pungkasan opsi. Iki migunani kanggo ngidini bantahan luwih akeh marang program AWK kanggo miwiti kanthi `` - ''. Iki utamané kanggo konsistensi karo konvènsi parsing argumentasi sing dipigunakaké déning sapérangan program POSIX liyané.

Ing mode kompatibilitas, opsi-opsi liyane diwenehi tandha ora sah, nanging ora digatekake. Ing operasi normal, anggere teks program wis diwenehi, opsi sing ora dingerteni bakal diwiwiti menyang program AWK ing array ARGV kanggo proses. Iki utamané migunani kanggo nglatih program AWK liwat mekanisme interpreter eksekusi `` #! ''.

AWK PROGRAM EXECUTION

Program AWK kasusun saka urutan pola-aksi statement lan definisi fungsi opsional.

pola { aksi pernyataan }

jeneng fungsi ( dhaptar parameter ) { statements }

Gawk pisanan maca sumber program saka program-file (s) yen kasebut, saka argumen menyang --source , utawa saka pitakonan non-opsi pisanan ing baris perintah. Opsi -f lan --source bisa digunakake kaping pirang-pirang ing baris perintah. Gawk maca teks program kaya kabeh file-file lan teks sumber baris dikirim bebarengan. Iki migunani kanggo perpustakaan bangunan fungsi AWK, tanpa kudu nyakup kabeh program AWK anyar sing digunakake. Iku uga nyedhiyakake kemampuan kanggo nyampur fungsi perpustakaan karo program baris perintah.

Variabel lingkungan AWKPATH nemtokake path panelusuran sing digunakake nalika nemokake file sumber sing dijenengi opsi -f . Yen variabel iki ora ana, path standar ".: / Usr / local / share / awk" . (Direktori nyata bisa beda-beda, gumantung marang cara gawk dibangun lan diinstal.) Yen jeneng berkas sing diwenehake marang opsi -f ngemot karakter `` / '', ora ana path search.

Gawk nglakokaké program AWK ing urutan ngisor iki. Kaping kabeh, assignments maneko rupo sing ditemtokake liwat -v pilihan sing dileksanakake. Sabanjure, gawk nyusun program kasebut dadi wangun internal. Banjur, gawk nglakokaké kodhe ing pamblokiran BEGIN (s) (manawa ana), banjur nerusake maca saben file sing dijenengi ing array ARGV . Yen ora ana file sing dijenengi ing baris perintah, gawk maca input standar.

Yen filename ing baris perintah duwe wangun var = val lagi dianggep minangka assignment variabel. Var variabel bakal diutus val value. (Iki kedadeyan sawise pamindhahan BEGIN (s) wis mlaku.) Baris baris assignment variabel paling migunani kanggo mbedakake dinamis angka-angka menyang variabel-variabel panganggone AWK kanggo ngontrol cara masukan dipérang dadi lapangan lan cathetan. Iku uga migunani kanggo ngontrol negara yen sawetara pass needed liwat file data siji.

Yen nilai saka unsur ARGV tartamtu kosong ( "" ), gawk ngliwati.

Kanggo saben rekaman ing input, tes gawk kanggo ndeleng apa sing cocok karo pola ing program AWK. Kanggo saben pola rekaman sing cocog, tumindak sing gegandhengan dieksekusi. Pola diuji ing urutan sing kedadeyan ing program kasebut.

Akhire, sawise kabeh input wis kesel, gawk nglakokne kode ing blok END (s) (yen ana).

Variabel, Records, lan Bidang

Variabel AWK dinamis; padha muncul nalika lagi dipigunaake. Nilai kasebut minangka salah sawijining nomer utawa garis-garis sing mengambang, utawa loro-lorone, gumantung marang cara sing digunakake. AWK uga nduweni array siji dimensi; Array karo sawetara dimensi bisa diarani. Sawetara variabel sing wis ditemtokake wis disetel minangka program sing lumaku; iki bakal diterangake minangka perlu lan rangkuman ing ngisor iki.

Cathetan

Biasane, cathetan dipisahake dening karakter garis anyar. Sampeyan bisa ngontrol carane cathetan dipisahake kanthi menehi nilai menyang RS variabel sing dibangun. Yen RS iku karakter siji, karakter kasebut misahake rekaman. Yen ora, RS minangka ungkapan biasa. Teks ing input sing cocog karo ungkapan biasa iki misahake rekaman. Nanging, ing mode kompatibilitas, mung karakter pisanan saka sawijining senar sing digunakake kanggo pamisahan. Yen RS disetel dadi string null, banjur rekaman dipisahake kanthi baris kosong. Nalika RS disetel menyang string nebula, karakter garis anyar tansah bisa dadi pemisah lapangan, saliyane nilai FS sing ana .

Lapangan

Minangka saben rekaman input dibaca, gawk pamisah rekaman menyang kolom , nggunakake nilai saka variabel FS minangka pemisah kolom. Yen FS minangka karakter siji, kolom kasebut dipisahake karo karakter kasebut. Yen FS minangka string kosong, mangka saben karakter individu dadi kolom kapisah. Yen ora, FS dijaluk dadi ekspresi reguler. Ing kasus khusus sing FS minangka spasi tunggal, lapangan dipisahake kanthi nganggo spasi lan / utawa tab lan / utawa baris anyar. (Nanging pirembagan bab diskusi - ing ngisor, ing ngisor iki). CATETAN: Nilai IGNORECASE (ndeleng ngisor) uga mengaruhi cara lapangan dipérang nalika FS minangka ekspresi reguler, lan carane cathetan dipisahake nalika RS minangka ekspresi reguler.

Yen variabel FIELDWIDTHS disetel menyang dhaptar spasi sing dipisahake spasi, saben lapangan wis dianggep wis ditrapake jembar, lan gawk dipisahake kanthi rekaman kanthi lebar sing ditemtokake. Nilai FS diabaikan. Nuduhake nilai sing anyar kanggo FS bakal ngatasi panggunaan FIELDWIDTHS , lan nguripake maneh prilaku standar.

Saben lapangan ing rekaman input bisa kasebut jroning posisi, $ 1 , $ 2 , lan sateruse. $ 0 minangka rekaman kabeh. Bidang ora perlu dirujuk kanthi konstanta:

n = 5
print $ n

prints lapangan kaping lima ing cathetan input.

Variabel NF disetel menyang total kolom ing rekaman input.

Referensi kanggo kothak sing ora ana (yaiku kothak sawise $ NF ) ngasilake string-niscaya. Nanging, nampilake kolom sing ora ana (umpamane, $ (NF + 2) = 5 ) ningkatake nilai NF , nggawe sembarang lapangan interval kanthi string null minangka nilainya, lan nimbulake nilai $ 0 supaya dibalekake, kothak kasebut dipisahake dening nilai OFS . Referensi kanggo kothak nomer sing dikarepake nyebabake kesalahan fatal. Nurunaken NF nimbulaken nilai-nilai saking lapangan ingkang nembe nampi nilai enggal, lan nilai $ 0 dipunrrekaken, kanthi lapangan dipisahaken kaliyan nilai OFS .

Nemtokake nilai menyang kolom sing ana nyebabake kabeh rekaman bakal dibangun nalika $ 0 wis dirujuk. Kajaba iku, menehi nilai menyang $ 0 nyebabake rekaman dadi resplit, nggawe nilai anyar kanggo lapangan.

Variabel sing Dibangun

Variabel sing dibangun ing Gawk yaiku:

ARGC

Jumlah argumen baris perintah (ora kalebu pilihan kanggo gawk , utawa sumber program).

ARGIND

Indeks ing ARGV ing file saiki lagi diproses.

ARGV

Array argumen baris perintah. Urutane digunake saka 0 kanggo ARGC - 1. Ngubah kanthi otomatis isi ARGV bisa ngontrol file sing digunakake kanggo data.

BINMODE

Ing sistem non-POSIX, nemtokake mode `` binary '' kanggo kabeh file I / O. Nilai numerik 1, 2, utawa 3, nemtokake file input, file output, utawa kabeh file, kudu nganggo I / O binar. Nilai-nilai string "r" , utawa "w" nemtokake file input, utawa file output, kudu nganggo I / O biner. Nilai-nilai string "rw" utawa "wr" nemtokake kabeh file kudu nganggo I / O binar. Nilai senar liyane dijupuk minangka "rw" , nanging ngasilake pesen peringatan.

CONVFMT

Format konversi kanggo angka, "% .6g" , minangka standar.

ENVIRON

Urutan sing ngemot nilai-nilai lingkungan saiki. Arrayen diindeks dening variabel lingkungan, saben elemen minangka nilai saka variabel kasebut (contone, ENVIRON ["HOME") bisa uga / home / arnold ). Ngganti susunan iki ora mengaruhi lingkungan sing ditemokake dening program-program kang bisa diganti liwat fungsi redirection utawa sistem () .

ERRNO

Yen kesalahan sistem kedadeyan kanthi cara redirection kanggo getline , nalika maca kanggo getline , utawa nalika close () , banjur ERRNO bakal ngemot string sing njelasake kesalahan. Nilai kasebut tundhuk terjemahan ing lokal non-Inggris.

FIELDWIDTHS

Daftar kolom lapang putih dipisah. Nalika disetel, gawk nglebokake masukan menyang kolom lebar sing tetep, tinimbang nggunakake nilai variabel FS minangka pemisah kolom.

JENENG BERKAS

Jeneng file input saiki. Yen ora ana berkas sing ditemtokake ing baris perintah, nilai FILENAME yaiku `` - ''. Nanging, FILENAME ora ditemokake ing blok BEGIN (kajaba diset ing getline ).

FNR

Nomer rekaman input ing file input saiki.

FS

Pemisah kolom input, spasi kanthi standar. Waca Fields , ndhuwur.

IGNORECASE

Ngontrol kasus-sensitivitas kabeh ekspresi reguler lan operasi senar. Yen IGNORECASE duweni nilai non-nol, banjur perbandingan senar lan pola sing cocog karo aturan, lapangan pisah karo FS , rekaman sing dipisahake karo RS , pencocokan ekspresi reguler karo ~ lan ! ~ , Lan gensub () , gsub () , index () , match () , pamisah () , lan sub () fungsi sing diwangun ing kabeh kasus sing ora ditali nalika nglakoni operasi ekspresi reguler. CATETAN: Arrange subskriptor ora kena pengaruh, utawa fungsi asort () .

Mangkono, yen IGNORECASE ora padha karo nol, / aB / cocog karo kabeh "ab" , "aB" , "Ab" , lan "AB" . Karo kabeh variabel AWK, nilai awal IGNORECASE iku nol, supaya kabeh ekspresi reguler lan operasi senar biasane cilik-sensitif. Ing Unix, aksara karakter ISO 8859-1 Latin-1 kanthi lengkap digunakake nalika ngilangi kasus.

LINT

Nyedhiyakake kontrol dinamis pilihan - saka ing program AWK. Nalika bener, gawk prints warnings lint. Nalika palsu, ora. Nalika ditrapake nilai senar "fatal" , bebaya warnings dadi kasalahan fatal, persis kaya --lint = fatal . Sembarang nilai sejati liyane mung menehi peringatan.

NF

Jumlah kolom ing rekaman input saiki.

NR

Jumlah cathetan input katon nganti saiki.

OFMT

Format output kanggo angka, "% .6g" , minangka standar.

OFS

Pemisah lapangan output, spasi kanthi standar.

ORS

Pemisah rekaman output, kanthi standar garis anyar.

PROCINFO

Unsur saka daftar iki nyedhiyakake akses informasi babagan program AWK sing mlaku. Ing sawetara sistem, ana uga unsur ing array, "group1" liwat "grup n " kanggo sawetara n , yaiku nomer kelompok tambahan sing nduweni proses. Gunakake operator kanggo nyoba kanggo unsur kasebut. Unsur ing ngisor iki dijamin bisa kasedhiya:

PROCINFO ["eg"]

nilai saka getegid (2) sistem panggilan.

PROCINFO ["euid"]

nilai saka geteuid (2) sistem panggilan.

PROCINFO ["FS"]

"FS" manawa lapangan pisah karo FS ing efek, utawa "FIELDWIDTHS" yen lapangan pisah karo FIELDWIDTHS ana efek.

PROCINFO ["gid"]

nilai saka getgid (2) sistem panggilan.

PROCINFO ["pgrpid"]

proses kelompok ID proses saiki.

PROCINFO ["pid"]

proses ID proses saiki.

PROCINFO ["ppid"]

ID proses induk proses saiki.

PROCINFO ["uid"]

Nilai saka getuid (2) sistem panggilan.

RS

Pemisah rekaman input, minangka standar anyar.

RT

Terminator rekaman. Gawk mranata RT kanggo teks input sing cocog karo karakter utawa ekspresi reguler kasebut dening RS .

RSTART

Indeks indeks kapisan sing cocog karo match () ; 0 yen ora cocog. (Iki nuduhake yen indikator karakter diwiwiti kanthi siji.)

RLENGTH

Dawane string sing cocog karo match () ; -1 yen ora cocog.

SUBSEP

Karakter sing digunakake kanggo misahake pirang-pirang subscripts sajrone elemen array, kanthi standar "034" .

TEXTDOMAIN

Domain teks saka program AWK; digunakake kanggo nemokake terjemahan lokal kanggo senar program.

Array

Array ditondoi kanthi ekspresi antara kurung siku (lan ] ). Yen ekspresi minangka dhaptar ekspresi ( expr , expr ...), banjur subscript rangkap yaiku string sing kasusun saka concatenation (string) nilai saben ekspresi, dipisahake karo nilai saka variabel SUBSEP . Fasilitas iki digunakake kanggo simulasi array dimensi sing dimanfaatake. Tuladhane:

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

nandani senar "hello, world \ n" kanggo unsur array x sing diindeks dening senar "A \ 034B \ 034C" . Kabeh array ing AWK ana asosiatif, ie diindeks dening nilai-nilai string.

Operator khusus bisa digunakake ing yen utawa nalika statement kanggo ndeleng manawa susunan nduweni indeks sing kalebu nilai tartamtu.

yen (array ing array) print array [val]

Yen array duwe sawetara subscripts, gunakake (i, j) ing array .

Ing mbangun uga bisa digunakake kanggo daur ulang kanggo ngulangake kabeh elemen saka sawijining array.

Unsur bisa dibusak saka array kanthi nggunakake pernyataan dibusak . Pernyataan sing mbusak uga bisa digunakake kanggo mbusak kabeh isi rangkuman, mung kanthi nemtokake jeneng array tanpa subkategori.

Ngetik Variabel lan Konversi

Variabel lan kothak uga (nomer floating), utawa string, utawa loro-lorone. Carane nilai saka variabel sing diinterpretasikake gumantung marang konteks. Yen dipigunakaké sajrone ekspresi numerik, bakal dianggep minangka nomer, yen digunakake minangka senar bakal dianggep minangka senar.

Kanggo meksa variabel sing bakal dianggep minangka nomer, nambah 0; kanggo nimbulaké supaya bisa dianggep minangka senar, concatenate karo string null.

Nalika string kudu dikonversi menyang nomer, konversi wis rampung nggunakake strtod (3). Nomer dikonversi menyang senar kanthi nggunakake nilai CONVFMT minangka format string kanggo sprintf (3), kanthi nilai numerik saka variabel minangka argumen. Nanging, sanajan kabeh angka ing AWK minangka titik ngambang, nilai integral bakal diowahi minangka integer. Mangkono, diwenehake

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

variabel b duweni nilai string "12" lan ora "12,00" .

Gawk nglakoni banding kaya sing kasebut ing ngisor iki: Yen ana loro variabel numerik, dibandhingake sacara numerik. Yen siji angka iku numerik lan liyane duweni nilai senar sing minangka `'senar numerik,' 'banjur bandinge uga dilakoni sacara numerik. Yen ora, angka numerik dikonversi menyang senar lan perbandingan senar dilaksanakake. Siji strings dibandhingake, mesthi, minangka strings. Elinga yen standar POSIX ditrapake konsep "string senar" nang endi wae, malah dadi konstanta senar. Nanging, iki jelas ora bener, lan gawk ora nindakake iki. (Untung wae, iki wis tetep ing versi sabanjure.)

Elinga yen konstanta senar, kayata "57" , ora ana senar numerik, iku konstanta senar. Gagasan `` string numerik '' mung ditrapake kanggo kolom, getline input, FILENAME , elemen ARGV , unsur ENVIRON lan elemen saka sawijining array sing digawe dening pamisah () sing ana senar numerik. Ide dasar iku input pengguna , lan mung input pangguna, sing katon numerik, kudu dianggep cara kasebut.

Variabel sing ora ditemtokake duwe nilai numerik 0 lan nilai senar "" (null, utawa kosong, senar).

Octal lan Hexadecimal Constants

Miwiti versi 3.1 saka gawk, sampeyan bisa nggunakake konstanta oktal lan heksadesimal ing gaya C ing kode sumber program AWK. Contone, nilai oktaf 011 padha karo desimal 9 , lan nilai heksadesimal 0x11 padha karo desimal 17.

String Constants

Werna konstanta ing AWK yaiku urutan karakter-karakter sing dilikake antarane kuotasi ganda ( " ). Ing sajroning senar, urutan kaidinan tartamtu diakoni, kayata ing C. Iki yaiku:

\\

A backslash harfiah.

\ a

Karakter `'tandha' '; biasane karakter BEL ASCII.

\ b

backspace.

\ f

form-feed.

\ n

newline.

\ r

kembange bali.

\ t

tab horizontal.

\ v

vertikal tab.

\ x hex digit

Karakter diwakili senar saka digit heksadesimal sasuwene \ x . Kaya ing ANSIC, kabeh digit heksadesimal ing ngisor iki dianggep minangka bagéan saka urutan uwal. (Fitur iki kudu nyaritakake babagan desain basa dening panitia.) Misale, "\ x1B" yaiku karakter ASCIIESC (melarikan diri).

\ ddd

Karakter dituduhake kanthi urutan 1-, 2-, utawa 3 digit digit octal. Misale, "\ 033" yaiku karakter ESC (escapes ASCII).

\ c

Karakter literal c .

Urutan bisa uga digunakake ing sajrone ekspresi reguler (conto, / [\ t \ f \ n \ r \ v] / cocog karo karakter sing dienggo spasi).

Ing mode kompatibilitas, karakter sing dituduhake kanthi urutan octal lan hexadecimal bisa dianggep secara harfiah nalika digunakake ing konstanta expression biasa. Mangkono, / a \ 52b / padha karo / a \ * b / .

Pola lan Tindakan

AWK minangka basa sing berorientasi baris. Pola kasebut pisanan, lan banjur tumindak. Pernyataan aksi ditutup ing { lan } . Salah siji pola kasebut bisa ilang, utawa aksi kasebut ilang, nanging mesthi ora loro. Yen pola kasebut ora ana, tumindak kasebut dileksanakake kanggo saben rekaman input. Aksi sing ilang padha karo

{print}

sing nyetak kabeh cathetan.

Komentar diwiwiti kanthi karakter `` # '', lan terus nganti pungkasan baris. Kothong kosong bisa digunakake kanggo misahake statement. Biasane, statement pungkasan karo garis anyar, nanging ora kanggo garis pungkasan ing ``, '', { , ? , : , && , utawa || . Garis sing arep ditindakake utawa uga duwe statement kasebut kanthi otomatis terus ing baris kasebut. Ing kasus sanès, sawijining baris bisa dilanjutaké kanthi ngakhiri karo ', lan ing ngendi garis anyar bakal diabaikan.

Multiple statements bisa dilebokake ing siji baris kanthi pamisahan karo ``; ''. Iki ditrapake kanggo loro statement ing bagean tumindak saka pasangan pola-tindakan (kasus biasanipun), lan kanggo pola-tindakan statements piyambak.

Pola

Pola AWK bisa dadi salah siji ing ngisor iki:

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

BEGIN lan END yaiku rong pola khusus sing ora dites marang input. Bagian aksi kabeh BEGIN pola digabung kaya kabeh statement wis ditulis ing blok BEGIN siji . Padha dieksekusi sadurungé sembarang input wis dibaca. Kajaba iku, kabeh pamblokiran END wis digabung, lan dileksanakake yen kabeh input wis kesel (utawa nalika statement metu dileksanakake). BEGIN lan END pola ora bisa dikombinasikake karo pola liyane ing pola pola. BEGIN lan END pola ora bisa ilang bagian aksi.

Kanggo / ekspresi / pola reguler , pernyataan sing gegandhengan dieksekusi kanggo saben rekaman input sing cocog karo ekspresi reguler. Ekspresi reguler padha karo wong ing egrep (1), lan diringkes ing ngisor iki.

Ekspresi relational bisa nggunakake operator sing kasebut ing ngisor iki ing bagean ing tumindak. Iki umume nguji apa kothak tartamtu cocok karo ekspresi biasa tartamtu.

The && , || , lan ! operator sing mlebu logis lan, logis, OR, lan logis NOT, kayata ing C. Mereka nggawe evaluasi cendhek, uga kaya ing C, lan digunakake kanggo nggabungake ekspresi pola sing luwih primitif. Kaya ing pirang-pirang basa, kurung bisa digunakake kanggo ngganti susunan evaluasi.

Operator : kaya operator sing padha ing C. Yen pola pisanan bener, pola sing digunakake kanggo pengujian iku pola nomer loro, utawa kasebut, minangka pihak katelu. Mung salah siji pola kaping loro lan katelu dievaluasi.

Pola1 , wangun pola2 sing disebut pola corak . Sampeyan cocog kabeh cathetan input sing diwiwiti karo rekaman sing cocog karo pola1 , lan terus nganti rekaman sing cocog karo pola2 , kalebu. Sampeyan ora gabung karo sembarang ekspresi pola liyane.

Ekspresi Reguler

Ekspresi reguler yaiku jinis lengkap sing ditemokake ing egrep . Wong-wong iki kalebu karakter kaya ing ngisor iki:

c

cocog karo non-metacharacter c .

\ c

cocog karo karakter literal c .

.

cocog karo karakter kalebu newline.

^

cocog karo awal senar.

$

cocog karo ujung senar.

[ abc ... ]

dhaftar karakter, cocog karo samubarang aksara abc ....

[^ abc ... ]

daftar karakter sing disalahake, cocog karo karakter kajaba abc ....

r1 | r2

alternation: cocog karo r1 utawa r2 .

r1r2

concatenation: cocog karo r1 , lan banjur r2 .

r +

cocog siji utawa luwih r .

r *

cocog karo nol utawa luwih r .

r ?

cocog karo nol utawa siji r .

( r )

klompok: cocog r .

r { n }

r { n ,}

r { n , m } Siji utawa rong nomer ing braces nuduhke expression interval . Yen ana siji nomer ing kijang, ekspresi reguler sadurungé r ping pindho. Yen ana rong nomer dipisahake karo koma, r diulangi n nganti m kaping . Yen ana siji nomer sing diikuti karo koma, banjur r diulangi paling sethithik n kaping .

Ekspansi interval mung kasedhiya yen salah siji --posisi utawa - interval diwatesi ing baris perintah.

\ y

cocog karo string kosong ing awal utawa pungkasan tembung.

\ B

cocog karo string kosong ing tembung.

\ <

cocog karo string kosong ing awal tembung.

\>

cocog karo string kosong ing mburi tembung.

\ w

cocog karo sembarang karakter konstituen (huruf, digit, utawa garis ngisor).

\ W

cocog karo sembarang karakter sing ora tembung-konstituen.

\ '

cocog karo string kosong ing awal penyangga (senar).

''

cocog karo string kosong ing mburi buffer.

Urutan njlajah sing bener ing konstanta string (pirsani ing ngisor) uga bener ing ekspresi reguler.

Kelas karakter minangka fitur anyar sing dikenalaké ing standar POSIX. Kelas karakter minangka notasi khusus kanggo nggambarake daftar karakter sing nduweni atribut sing spesifik, nanging ing ngendi karakter kasebut bisa beda-beda saka negara menyang negara lan / utawa saka karakter sing disetel karo karakter. Contone, pangerten apa karakter alfabet bedo karo Amerika Serikat lan Prancis.

Kelas karakter mung sah ing ekspresi reguler nang kurung daftar karakter. Kelas karakter kalebu [: , tembung kunci sing nuduhake kelas, lan :] . Kelas karakter sing ditemtokake dening standar POSIX yaiku:

[: alnum:]

Karakter abu-abu.

[: alpha:]

Karakter abjad.

[:ra ono isine:]

Aksara papan utawa tab.

[: cntrl:]

Kontrol karakter.

[: digit:]

Karakter numerik.

[: grafik:]

Karakter sing bisa dicithak lan katon. (Spasi bisa diterbitake, nanging ora bisa ditemokake, dene sing loro-lorone.)

[: ngisor:]

Huruf alfabet cilik.

[: cetak:]

Karakter sing bisa dicithak (karakter sing ora ngontrol karakter.)

[: punct:]

Huruf tandha (aksara sing dudu huruf, digit, karakter kontrol, utawa karakter spasi).

[:panggonan:]

Karakter spasi (kayata papan, tab, lan formfeed, jeneng sawetara).

[: ndhuwur:]

Huruf alfabet ndhuwur-huruf.

[: xdigit:]

Karakter sing angka heksadesimal.

Contone, sadurunge standar POSIX, cocog karo karakter alfanumerik, sampeyan kudu nulis / [A-Za-z0-9] / . Yen karakter sampeyan duwe karakter alfabet liyané, iki ora bakal cocog, lan yen karakter disusun sacara béda saka ASCII, iki ora bisa uga cocog karo karakter alfanumerik ASCII. Kanthi kelas karakter POSIX, sampeyan bisa nulis / [[: alnum:]] , lan iki cocog karo karakter alfabetik lan numerik ing set karakter.

Rong urutan khusus tambahan bisa katon ing dhaptar karakter. Iki ditrapake kanggo set karakter non-ASCII, sing bisa nduwe simbol tunggal (disebut collating elements ) sing diwakili luwih saka siji karakter, uga sawetara karakter sing setara kanggo nyusun , utawa ngurutake, tujuane. (Contone, ing basa Perancis, "e" lan "e"

Simbol Collating

Simbol gabungan yaiku elemen collating multi karakter sing dilampirake ing [. lan .] . Contone, yen ch minangka unsur collating, banjur [[.ch.]] Minangka ekspresi reguler sing cocog karo unsur collating iki, dene [ch] minangka ekspresi reguler sing cocog karo c utawa h .

Kelas Equivalènsi

Kelas ekualisma minangka jeneng lokal kanggo daftar karakter sing padha. Jeneng kasebut dilebokake ing [= lan =] . Contone, jeneng e bisa uga digunakake kanggo makili kabeh e, e, e, e lan e. Ing kasus iki, [[e =]] minangka ekspresi reguler sing cocog karo e , e ' , utawa e` .

Fitur-fitur kasebut banget terkenal ing lokal sing ora bisa nganggo basa Inggris. Fungsi perpustakaan sing nggunakake gawangan kanggo pencocokan ekspresi reguler saiki mung ngakoni kelas karakter POSIX; padha ora ngakoni simbol collating utawa kelas equivalence.

Operator \ y , \ B , \ < , \> , \ w , \ W , \ ' , lan \' operator khusus kanggo gawat ; padha ekstensi adhedhasar fasilitas ing perpustakaan ekspresi regular GNU.

Pilihan baris komando manawa ngontrol carane gawk napsirake karakter ing ekspresi reguler.

Ora ana pilihan

Ing kasus standar, gawk nyedhiyani kabeh fasilitas POSIX ekspresi reguler lan operator ekspresi regular GNU sing kasebut ing ndhuwur. Nanging, ekspansi interval ora didukung.

--Pendix

Mung POSIX ekspresi reguler didhukung, para operator GNU ora khusus. (Contone, w cocok karo w ). Ekspansi interval diijini.

--traditional

Biasa Unix awk ekspresi reguler cocok. Operator GNU ora khusus, ekspansi interval ora kasedhiya, lan ora ana kelas karakter POSIX ( [[: alnum:]] lan liya-liyane). Karakter sing diterangake kanthi urutan octal lan hexadecimal bisa dianggep secara harfiah, sanajan uga makili metacharacters ekspresi reguler.

--re-interval

Nyuwun ekspresi interval ing ekspresi reguler, sanajan - wis diwenehake.

Tindakan

Pernyataan aksi ditahan ing klient, { lan } . Statement aksi kalebu tugas sing biasa, statement bersyarat, lan perulangan sing ditemokake ing pirang-pirang basa. Operator, laporan kontrol, lan pernyataan input / output kasedhiya ing pola c.

Operator

Operator ing AWK, supaya bisa ngurangi precedence

( ... )

Nggabungake

$

Rujukan lapangan.

++ -

Tambahan lan pengurangan, awalan lan postfix.

^

Exponentiation ( ** uga bisa digunakake, lan ** = kanggo operator tugas).

+ -!

Unary plus, unary minus, lan negasi logis.

* /%

Multiplikasi, divisi, lan modulus.

+ -

Tambahan lan pamindahan.

panggonan

Rintisan.

<>

<=> =

! = == Operator relasional biasa.

~! ~

Pertandingan expression biasa, match negated. CATETAN: Aja nganggo ekspresi biasa sing konstan ( / foo / ) ing sisih kiwa ~ utawa ! ~ . Mung gunakake siji ing sisih tengen. Ekspresi / foo / ~ exp duwe arti sing padha (($ 0 ~ / foo /) ~ exp ) . Iki biasane ora dimaksudake.

ing

Keanggotaan Array.

&&

Logis lan.

||

Logis UTAWA.

?:

Ekspresi conditional C. Iki duwe ekspr1 ? expr2 : expr3 . Yen expr1 bener, angka ekspresi punika expr2 , sauntara kuwi expr3 . Mung siji expr2 lan expr3 dievaluasi.

= + = - =

* = / =% = ^ = Assignment. Loro assignment absolut ( var = nilai ) lan operator-assignment (bentuk liya) sing didhukung.

Kontrol Kontrol

Pernyataan kontrol minangka minangka berikut:

yen ( kondisi ) statement [ liya statement ] nalika ( kondisi ) statement apa statement nalika ( kondisi ) kanggo ( expr1 ; expr2 ; expr3 ) statement kanggo ( array ing array ) statements }

Pernyataan I / O

Pernyataan input / output minangka nderek:

close ( file [ , how ] )

Tutup file, pipa utawa co-proses. Opsional carane ngirim mung digunakake nalika nutup siji mburi pipa rong arah menyang proses bebarengan. Iku kudu dadi nilai senar, yaiku "kanggo" utawa "saka" .

getline

Setel $ 0 saka rekaman input sabanjuré; nyetel NF , NR , FNR .

getline < file

Setel $ 0 saka rekaman berkas sabanjure; nyetel NF .

getline var

Setel var saka rekaman input sabanjuré; nyetel NR , FNR .

getline var < file

Setel var saka rekaman berkas sabanjure.

dhuwit | getline [ var ]

Run printah ngasilake output dadi $ 0 utawa var , kaya ing ndhuwur.

printah | & getline [ var ]

Muter perintah minangka co-proses piping output dadi $ 0 utawa var , kaya ing ndhuwur. Co-processes minangka ekstensi gawk .

sabanjure

Mungkasi ngolah rekaman input saiki. Cathetan input sabanjuré diwaca lan diproses diwiwiti kanthi pola pisanan ing program AWK. Yen pungkasan data input kacepetan, blok END , yen ana, bakal kaleksanan.

nextfile

Mungkasi ngolah file input saiki. Cathetan input sabanjuré diwiwiti saka file input sabanjure. FILENAME lan ARGIND sing diupdate, FNR wis di- reset dadi 1, lan proses diwiwiti kanthi pola pisanan ing program AWK. Yen pungkasan data input kacepetan, blok END , yen ana, bakal kaleksanan.

print

Mencetak rekaman saiki. Rekam output dibusak kanthi nilai variabel ORS .

print expr-list

Ekspresi cetak. Saben expression dipisahake dening nilai saka variabel OFS . Rekam output dibusak kanthi nilai variabel ORS .

print expr-list > file

Ekspresi cetak ing file . Saben expression dipisahake dening nilai saka variabel OFS . Rekam output dibusak kanthi nilai variabel ORS .

printf fmt, expr-list

Format lan cetak.

printf fmt, expr-list > file

Format lan print ing file .

sistem ( cmd-line )

Nglakoni perintah cmd-line , lan bali status metu. (Iki ora kasedhiya ing sistem non-POSIX.)

fflush ( [ file ] )

Ngilangke sembarang buffer sing digandhengake karo file output mbukak utawa file pipa. Yen file ora ilang, banjur keluaran standar diiseni. Yen file minangka string kosong, kabeh file lan pipa output sing mbukak wis ngasilake buffer.

Redirect output tambahan diijini print and printf .

print ... >> file

nambah output menyang file .

print ... | dhawuhe

nyerat ing pipa.

print ... | & printah

ngirim data menyang proses bebarengan.

Pangrasa getline ngasilake 0 ing pungkasan file lan -1 ing salah. Sawise kesalahan, ERRNO ngandhut senar sing njlentrehake masalah kasebut.

CATETAN: Yen nggunakake pipa utawa proses kanggo njaluk baris , utawa saka print utawa printf ing sawijining daur ulang, sampeyan kudu nggunakake cedhak () kanggo nggawe instansi anyar saka perintah kasebut. AWK ora kanthi otomatis nutup pipa utawa co-proses nalika bali menyang EOF.

Pernyataan printfot

Versi AWK printf statement lan sprintf () fungsi (ndeleng ngisor) nampa format spesifikasi konversi:

% c

Karakter ASCII. Yen argumen sing digunakake kanggo % c iku numerik, bakal dianggep minangka karakter lan dicithak. Yen ora, argumen dianggep minangka senar, lan siji-sijine karakter pisanan string kasebut dicithak.

% d , % i

Nomer desimal (bagean integer).

% e,% E

A nomer titik apungan saka [-] d.dddddde [+ -] dd . Format E E migunakake E tinimbang e .

% f

Nomer floating point saka wangun [-] ddd.dddddd .

% g,% G

Gunakake % e utawa % f konversi, sing luwih cendhek, karo nol sing ora jelas ditindhes. Format % G migunakake % E tinimbang % e .

% o

Nomer octal sing ora ditulis (uga integer).

% u Nomer desimal unsigned (maneh, lan integer).

% s

Senar karakter.

% x,% X

Nomer heksadesimal unsigned (integer). Format % X migunakake ABCDEF tinimbang abcdef .

%%

% Siji karakter; ora ana pitakonan sing dikonversi.

Opsional, paramèter tambahan bisa uga dumunung ing antarane % lan huruf kontrol:

count $

Gunakake argumen count ing titik iki ing format. Iki diarani specifier posisi lan dimaksudake utamané kanggo nggunakake versi translated strings format, ora ing teks asli program AWK. Iku extension gawk .

-

Ekspresi kasebut kudu ditrapake ing lapangan.

panggonan

Kanggo konversi angka, awalan nilai positif kanthi spasi, lan nilai negatif kanthi tandha minus.

+

Tandha plus, digunakake sadurunge modifier lebar (ndeleng ngisor), ngandika kanggo sok nyedhiyani tandha kanggo konversi numerik, sanajan data sing diformat iku positif. Ing + ngatasi modifier spasi.

#

Gunakake wangun `` alternate '' kanggo aksara kontrol tartamtu. Kanggo % o , pasang nol leading. Kanggo % x , lan % X , pasang 0x utawa 0X anjog kanggo asil nonzero. Kanggo % e , % E , lan % f , asil kasebut tansah ana titik desimal. Kanggo % g , lan % G , mburine zeros ora dibusak saka asil.

0

A leading 0 (nol) tumindak minangka flag, sing nuduhake output kudu empuk karo nol tinimbang spasi. Iki bisa uga ditrapake ing format output non-angka. Gendéra iki mung nduwèni pengaruh nalika jembaré lapangan luwih akèh tinimbang nilai sing bakal dicithak.

ambane

Kothak kudu empuk nganti jembar iki. Lapangan kasebut biasane empuk karo spasi. Yen flag 0 wis dipigunakaké, iku pancen empuk karo zeroes.

. prec

Nomer sing nemtokake presisi sing digunakake nalika dicithak. Kanggo format % e , % E , lan % f , iki nemtokake nomer digit sing pengin dicithak ing sisih tengen titik desimal. Kanggo % g , lan format % G , iki nemtokake jumlah maksimum pinunjul digit. Kanggo % d , % o , % i , % u , % x , lan % X format, nemtokake nomer minimal digit sing dicithak. Kanggo % s , nemtokake jumlah maksimum karakter saka senar sing kudu dicithak.

Werna dinamis lan kemampuan kapabilitas printf ( ANSI) printf () sing didhukung. A * ing papan kasebut manawa jembar utawa prajurit spesifik nyebabake nilai-nilai sing dijupuk saka dhaptar argumen menyang printf utawa sprintf () . Kanggo nggunakake spekulasi posisi kanthi ambane utawa presisi dinamis, pasokan count $ sawise * ing senar format. Contone, "% 3 $ * 2 $. * 1 $ s" .

Jeneng Gambar khusus

Nalika nglakoni redireksi saka salah siji print utawa printf menyang file, utawa liwat getline saka file, gawk ngenalake filename tartamtu ing njero. Filenames iki ngidini akses kanggo mbukak deskriptor file sing warisan saka prosesan wong gawk (biasane cangkang). Jeneng-jeneng berkas iki uga bisa digunakake ing baris perintah kanggo ngganti file data. Jeneng filen yaiku:

/ dev / stdin

Input standar.

/ dev / stdout

Output standar.

/ dev / stderr

Output kesalahan standar.

/ dev / fd / n

Berkas sing digandhengake karo deskriptor file mbukak n .

Iki migunani banget kanggo pesen kesalahan. Tuladhane:

print "Sampeyan nyebul iku!" > "/ dev / stderr"

dene sampeyan bakal digunakake

print "Sampeyan nyebul iku!" Deleng uga "cat 1> & 2"

Jeneng-jeneng ing ngisor iki bisa digunakake karo operator & co-proses kanggo nggawe koneksi jaringan TCP / IP.

/ inet / tcp / lport / rhost / rport

Berkas kanggo sambungan TCP / IP ing lport port lokal kanggo host rol nyebar ing roto port remote. Gunakake port 0 kanggo nduwe system pick port.

/ inet / udp / lport / rhost / rport

Kaya, nanging nggunakake UDP / IP tinimbang TCP / IP.

/ inet / raw / lport / rhost / rport

Disimpen kanggo mangsa ngarep.

Jeneng file khusus liyane nyedhiyakake akses informasi babagan proses gawk mlaku. Saiki jeneng berkas iki wis ora sah. Gunakake array PROCINFO kanggo entuk informasi sing diwenehake . Jeneng filen yaiku:

/ dev / pid

Reading file iki ngasilake proses ID proses saiki, ing desimal, diakhiri karo baris anyar.

/ dev / ppid

Reading file iki ngasilake ID proses induk proses saiki, ing desimal, diakhiri karo baris anyar.

/ dev / pgrpid

Reading file iki ngasilake ID klompok proses proses saiki, ing desimal, diakhiri karo baris anyar.

/ dev / user

Mbukak file kasebut ngasilake rekaman siji sing diakhiri nganggo baris anyar. Kothak bakal dipisahake karo spasi. $ 1 yaiku nilai saka getuid (2) sistem panggilan, $ 2 minangka nilai saka geteuid (2) sistem panggilan, $ 3 yaiku nilai getgid (2) sistem panggilan, lan $ 4 iku nilai getegid (2) sistem telpon. Yen ana kolom tambahan, ID grup kasebut bali dening getgroups (2). Klompok multi ora bisa didhukung ing kabeh sistem.

Fungsi numerik

AWK nduweni fungsi aritmatic ing ngisor iki:

atan2 ( y , x )

Ngasilake arctangent y / x ing radian.

cos ( expr )

Ngliwati kosinus eksprim , sing ana ing radian.

exp ( expr )

Fungsi eksponensial.

int ( expr )

Truncates to integer.

log ( expr )

Fungsi logaritma alami.

rand ()

Ngasilake nomer acak antara 0 lan 1.

dosa ( expr )

Ngasilake sine ekspr , sing ana ing radian.

sqrt ( expr )

Fungsi root square.

srand ( [ expr ] )

Migunakake expr minangka wiji anyar kanggo generator nomer acak. Yen ora ana expr sing diwenehake, wektu digunakake. Nilai bali iku winih sadurunge kanggo generator nomer acak.

Fungsi Senar

Gawk nduweni fungsi senar ing ngisor iki:

asort ( s [ , d ] )

Ngilangake nomer unsur ing array array s . Isi s diurutake nggunakake aturan normal gawk kanggo mbandingaken nilai-nilai, lan indeks saka nilai-nilai sing diurut diganti karo wilangan sekuensial sing diwiwiti kanthi 1. Yen array tujuan opsional d kasebut , banjur s dobel dobel d , banjur d diurutake, ninggalakake indeks arus sumber ora diganti.

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

Temokake target string t kanggo cocog karo ekspresi reguler r . Yen h minangka string sing diwiwiti karo g utawa G , banjur ngganti kabeh match saka r karo s . Yen ora, h minangka nomer sing cocog karo r kanggo ngganti. Yen t ora diwenehake, $ 0 digunakna. Ing teks panggantos, urutan \ n , ing ngendi n minangka digit saka 1 kanggo 9, bisa digunakake kanggo nuduhake mung teks sing cocog karo subprésiasi pasangan. Urutan \ 0 nggambarake kabeh teks sing cocok, kayadene karakter & . Ora kaya sub () lan gsub () , senar sing diowahi bali minangka asil fungsi, lan target string asli ora diganti.

gsub ( r , s [ , t ] )

Kanggo saben substring sing cocog karo ekspresi reguler r ing senar t , sulihna senar, lan pulihake nomer substitusi. Yen t ora diwenehake, gunakake $ 0 . Ing & ing teks panggantos diganti karo teks sing bener dicocogake. Gunakake \ & kanggo njaluk harfiah & . ( GAWK: Pemrograman AWK sing efektif kanggo dhiskusi bab aturan kanggo & backslashes ing teks panggantos sub () , gsub () , lan gensub () .)

indeks ( s , t )

Returns indeks string ing t ing s string, utawa 0 yen t ora ana. (Iki nuduhake yen indikator karakter diwiwiti kanthi siji.)

dawa ( [ s ] )

Ngembalikan panjang string , utawa dawane $ 0 yen s ora diwenehake.

match ( s , r [ , a ] )

Returns posisi ing s ngendi ekspresi reguler r occurs, utawa 0 yen r ora ana, lan atur nilai RSTART lan RLENGTH . Elinga yen urutan pitakonan padha kanggo operator ~ : str ~ re . Yen array diwenehake, sawijining bakal ngresiki lan banjur unsur 1 nganti n diisi karo bagian s sing cocog karo subexpression sing ana hubungane karo r . Unsur 0'th ngandhut bagean s sing cocog karo kabeh ekspresi reguler r .

pamisah ( s , a [ , r ] )

Pamisah string menyang array ing reksan biasa, lan ngasilake nomer kolom. Yen r ditolak, FS diganti . Arrayan dibusak dhisik. Pemisahan dumadi saka sawijining pisah, sing kasebut ing ndhuwur.

sprintf ( fmt , expr-list )

Prints expr-list miturut fmt , lan ngasilake string sing asil.

strtonum ( str )

Nliti str , lan ngasilake angka numerik. Yen str dimulai karo 0 , strtonum () nganggep str minangka nomer octal. Yen str dimulai kanthi leading 0x utawa 0X , strtonum () nganggep str minangka nomer heksadesimal.

sub ( r , s [ , t ] )

Kaya gsub () , nanging mung substring cocog sing pisanan diganti.

substr ( s , i [ , n ] )

Returns ing substring paling akeh n- karakter diwiwiti saka i . Yen n ilangi, sisa s digunakake.

tolower ( str )

Ngasilake salinan str strata , kanthi kabeh huruf gedhe ing str dilukokake marang mitra cilik sing cocog. Karakter non-alfabet ora diganti.

panganggo ( str )

Ngembalikan salinan str strata , kanthi kabeh huruf cilik ing str dilukokake menyang mitra cilik sing cocog. Karakter non-alfabet ora diganti.

Fungsi wektu

Awit salah sawijining kegunaan utama program AWK yaiku ngolah file log sing ngemot informasi prangko, gawk menehi fungsi ing ngisor iki kanggo nggayuh prangko wektu lan ngolah format kasebut.

mktime ( datespec )

Rurns datespec dadi cap waktu kanthi wangun sing padha bali dening systime () . Datepec minangka senar saka wangun YYYY MM DD HH MM SS [DST] . Isi string ana enem utawa pitung angka sing diwakili saben taun kayata abad, sasi saka 1 sasi nganti 12, dina sasi saka 1 sasi nganti 31, jam sasi 0-23, menit saka 0 sasi 59, lan liya saka 0 nganti 60, lan bendera panyimpenan lampu siang pilihan. Nilai-nilai kasebut kudu ora ana ing jangkoan kasebut; umpamane, jam saka -1 tegese 1 jam sadurunge tengah wengi. Kalender Gregorian ora ditemtokake, kanthi taun 0 sadurungé taun 1 lan taun -1 sadurungé taun 0. Wektu iki dianggep minangka wektu zona wektu. Yen bendera nyimpen sinar srengenge positif, wektu dianggep dadi wektu nyimpen wektu; yen nol, wektu kasebut dianggep standar wektu; lan yen negatif (minangka standar), mktime () nyoba kanggo nemtokake wektu sing diowahi wiyar sajrone ditrapake kanggo wektu sing ditemtokake. Yen tanggalpec ora ngandhut unsur cukup utawa yen wektu sing kasil metu saka jarak, mktime () ngasilake -1.

strftime ( [ format [ , timestamp ]] )

Format wektu tutup miturut spesifikasi ing format. Timestamp kudu padha karo sing dikembangke systime () . Yen wektu wis ilang, wektu saiki digunakake. Yen format ora ditemtokake, format standar sing padha karo output tanggal (1) digunakake. Deleng spesifikasi kanggo fungsi strftime () ing ANSI C kanggo konversi format sing dijamin bakal kasedhiya. Versi public domain saka strftime (3) lan kaca manawa diwenehake karo gawk ; yen versi kasebut digunakake kanggo mbangun gawk , banjur kabeh konversi sing diterangake ing kaca wong sing kasedhiya kanggo gawk.

systime ()

Ngasilake wektu saiki minangka nomer detik wiwit Epoch (1970-01-01 00:00:00 UTC ing sistem POSIX).

Fungsi Manipulasi Bit

Miwiti karo 3.1 versi gawk , fungsi manipulasi bit ing ngisor iki kasedhiya. Padha bisa kanthi nindakake nilai-nilai titik floating point kapindho menyang bilah sing ora ditandatangani , nglakokake operasi, banjur ngowahi asil maneh ing titik ngambang. Fungsi kasebut yaiku:

lan ( v1 , v2 )

Bali maneh lan nilai-nilai sing diwenehake dening v1 lan v2 .

compl ( val )

Bali pandhuan bitwise saka val .

lshift ( val , count )

Bali maneh nilai val , diobahake kiwa dening bit count .

utawa ( v1 , v2 )

Bali maneh bit UTAWA nilai sing diwenehake dening v1 lan v2 .

rshift ( val , count )

Bali maneh nilai val , diowahi tengen dening bit count .

xor ( v1 , v2 )

Bali XOR bitwise sing diwenehake dening v1 lan v2 .

Fungsi Internasionalisasi

Miwiti kanthi versi 3.1 gawk , fungsi ing ngisor iki bisa digunakake saka program AWK kanggo nerjemahake strings nalika rutin. Kanggo rincian lengkap, waca GAWK: Efektif AWK Programming .

bindtextdomain ( direktori [ , domain ] )

Nemtokake direktori ing ngendi gawk nggoleki file .mo , ing kasus kasebut ora bakal utawa ora bisa dilebokake ing lokasi `standar '(umpamane, nalika testing). Ngasilake direktori ing ngendi domain kasebut `` bound. ''

Domain gawan yaiku nilai TEXTDOMAIN . Yen direktori minangka string kosong ( "" ), banjur bindtextdomain () ngasilake pangiket ing domain kasebut .

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

Ngasilake string string ing domain domain teks kanggo kategori kategori lokal. Nilai default kanggo domain yaiku nilai saiki TEXTDOMAIN . Nilai default kanggo kategori yaiku "LC_MESSAGES" .

Yen sampeyan nyedhiyakake nilai kanggo kategori , mesthine dadi senar sing cocog karo salah sijine kategori locale sing diterangake ing GAWK: AWK Programming sing efektif . Sampeyan uga kudu nyedhiake domain teks. Gunakake TEXTDOMAIN yen sampeyan pengin nggunakake domain saiki.

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

Ngasilake wangun jamak kanggo nomer terjemahan string1 lan string2 ing domain domain teks kanggo kategori kategori lokal. Nilai default kanggo domain yaiku nilai saiki TEXTDOMAIN . Nilai default kanggo kategori yaiku "LC_MESSAGES" .

Yen sampeyan nyedhiyakake nilai kanggo kategori , mesthine dadi senar sing cocog karo salah sijine kategori locale sing diterangake ing GAWK: AWK Programming sing efektif . Sampeyan uga kudu nyedhiake domain teks. Gunakake TEXTDOMAIN yen sampeyan pengin nggunakake domain saiki.

FUNGSI-DEFINED FUNCTIONS

Fungsi ing AWK ditetepake minangka ing ngisor iki:

jeneng fungsi ( dhaptar parameter ) { statements }

Fungsi dieksekusi nalika diarani saka ekspresi ing pola utawa tumindak. Parameter aktual sing diwenehake ing panggilan fungsi digunakake kanggo instantiate paramèter formal sing dideklarasikaké ing fungsi kasebut. Array bakal dilewati dening referensi, variabel liyane bakal dilulusake kanthi nilai.

Wiwit fungsi ora asale minangka bagian saka basa AWK, panentu kanggo variabel lokal rada asat: Padha dinyatakake minangka paramèter ekstra ing daftar parameter. Konvènsi kasebut misahaké variabel lokal saka paramèter nyata kanthi spasi ekstra ing daftar parameter. Tuladhane:

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

Parenthesis kiwa ing panggilan fungsi dibutuhake kanthi langsung nganggo jeneng fungsi, tanpa papan putih intervensi. Iki kanggo nyegah ambiguitas sintaksis karo operator concatenation. Watesan iki ora ditrapake kanggo fungsi sing dibangun ing ndhuwur.

Fungsi bisa nyebut saben liyane lan mungkin rekursif. Parameter fungsi sing dipigunakaké minangka variabel lokal diinisialisasi dadi string kosong lan angka nol marang invocation fungsi.

Gunakake eksprimen bali kanggo ngasilake nilai saka fungsi. Nilai bali ora ditemtokake yen ora ana rega sing diwenehake, utawa yen fungsi kasebut bali dening `` mati '' mburi.

Yen - wis diwenehake, gawk menehi saran babagan panggilan menyang fungsi sing ora ditemtokake nalika ngurai , tinimbang ing wektu rutin . Nelpon fungsi ora ditemtokake nalika mbukak wektu iku kesalahan fatal.

Tembung func bisa digunakake ing panggunaan fungsi .

FUNCTION NEW LOADING DYNAMICALLY

Diwiwiti kanthi versi 3.1 gawk , sampeyan bisa nambah fungsi anyar ing sajrone interpreter gawk . Rincian lengkap sing ana ing njaba lingkup kaca manual iki; waca GAWK: Efektif AWK Programming kanggo rincian.

extension ( object , function )

Dinamis ngubungaké file obyek sing dijenengi kanthi jeneng, lan njaluk fungsi ing obyek kasebut, kanggo nglakokake initialization. Iki kudu disedhiyakake minangka strings. Ngganti angka sing dianyari kanthi fungsi .

Fungsi iki diwenehake lan didokumentasikan ing GAWK: AWK Pemrograman Efektif , nanging kabeh babagan fitur iki mungkin diganti ing release sabanjure. Kuwat banget nyaranake sampeyan ora nggunakake fitur iki kanggo apa-apa sing sampeyan ora gelem mbaleni maneh.

SIGNALS

pgawk nampa rong sinyal. SIGUSR1 nyebabake kanggo mbuang profil lan tumpukan telpon tumpukan menyang file profil, yaiku awkprof.out , utawa file apa wae sing dijenengi karo --profile option. Iku banjur terus mlaku. SIGHUP nyebabake dump profil lan tumpukan telpon banjur metu.

EXAMPLES

Nyetak lan medar jeneng login kabeh kedhaftar: BEGIN {FS = ":"} {print $ 1 | " ngisi"} Pilih angka ing file: {nlines ++} END {print nlines} Sadurunge baris kanthi nomer ing file: {print FNR, $ 0} Concatenate and line number (variasi sawijining tema): {print NR, $ 0}

Internalisasi

Konstanta ikatan yaiku urutan karakter ditempelake ing kuotasi ganda. Ing lingkungan non-basa Inggris, bisa diwenehi tandha ing program AWK minangka mbutuhake terjemahan menyang basa alami. Senar kasebut diwenehi tandha ing program AWK kanthi underscore leading (`` _ ''). Tuladhane,

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

tansah prints hello, donya . Nanging,

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

bisa print bonjour, monde ing Prancis.

Ana sawetara langkah sing bisa digunakake kanggo ngasilake lan ngaktifake program AWK sing bisa diinstal.

1.

Nambahake BEGIN tumindak kanggo nemtokake nilai menyang variabel TEXTDOMAIN kanggo nyetel domain teks menyang jeneng sing kagayut karo program sampeyan.


BEGIN {TEXTDOMAIN = "myprog"}

Iki ngidini gawk nemokake file .mo sing digandhengake karo program sampeyan. Tanpa langkah iki, gawk nggunakake domain teks pesen , sing mbokmenawa ora kalebu terjemahan kanggo program sampeyan.

2.

Tandha kabeh senar sing kudu diterjemahake nganggo garis ngisor.

3.

Yen perlu, gunakake fungsi dcgettext () lan / utawa bindtextdomain () ing program sampeyan, minangka cocok.

4.

Run gawk --gen-po -f myprog.awk> myprog.po kanggo generate file .po kanggo program sampeyan.

5.

Nyedhiyakake terjemahan sing tepat, lan mbangun lan nginstal file sing cocog .mo .

Fitur internasionalisasi dijelasake kanthi rinci ing GAWK: AWK Programming Effective .

Kompatibilitas Posix

Tujuan utama kanggo gawk kompatibilitas karo standar POSIX, uga karo versi UNIX sing paling anyar. Kanggo tujuan iki, gawk ngemot fitur-fitur sing jelas katon ing ngisor iki sing ora dijelasake ing buku AWK, nanging minangka bagian saka versi Bell Laboratories, lan ana ing standar POSIX.

Buku kasebut nuduhake yen tugas printah variabel baris nalika awk bakal mbukak argumen minangka file, sing sawise blokir BEGIN dieksekusi. Nanging, ing implementasine sadurungé, nalika tugas kasebut muncul sadurunge jeneng berkas sembarang, tugas kasebut bakal kedadeyan sadurunge blok BEGIN diluncurake . Aplikasi kasebut gumantung marang fungsi `` iki. '' Nalika awk diganti supaya cocog karo dokumentasi, opsi -v kanggo netepake variabel sadurunge eksekusi program ditambahake kanggo nampung aplikasi sing gumantung marang prilaku lawas. (Fitur iki disepakati dening Laboratorium Bell lan para pangembang GNU.)

Pilihan -W kanggo implementasine fitur tartamtu saka standar POSIX.

Nalika ngolah argumen, gawk migunakake opsi khusus `` - '' kanggo sinyal ujung bantahan. Ing mode kompatibilitas, iku menehi saran babagan nanging njabut opsi ora ditemtokake. Ing operasi normal, argumen kasebut dikirim menyang program AWK kanggo proses kasebut.

Buku AWK ora netepake nilai bali saka srand () . Standar POSIX wis ngasilake winih sing digunakake, kanggo ngidini njaga urutan nomer acak. Mulane srand () ing gawk uga ngasilake winih sing saiki.

Fitur-fitur anyar liyane yaiku: Nggunakna opsi multi -f (saka MKS awk ); ing array ENVIRON ; the \ a , lan \ v escape sequences (digawe ing wiwitan ing gawk lan panganan menyang versi Bell Laboratories); fungsi tolower () lan toupper () sing diwangun (ing versi Bell Laboratories); lan spesifikasi konversi ANSI C ing printf (pisanan ditrapake ing versi Laboratorium Bell).

Fitur Sajarah

Ana rong fitur saka implementasi AWK sajarah sing ndukung gawk . Kapisan, sampeyan bisa nelpon fungsi dawa () sing digawé ora mung tanpa pitakonan, nanging uga tanpa tandha kurung! Mangkono,

a = length # Holy Algol 60, Batman!

padha karo salah siji

a = length ()
a = dawa ($ 0)

Fitur iki ditandhani minangka `` ditolak '' ing standar POSIX, lan gawk masalah bebrayan babagan penggunaan yen --lint ditemtokake ing baris perintah.

Fitur liyane yaiku nggunakake terus utawa statement break ing njaba awak nalika , kanggo , utawa nggawe loop. Pelaksanaan AWK tradisional wis dianggep minangka panggunaan sing padha karo pernyataan sabanjure . Gawk ndhukung pemanfaatan iki yen - wis diwenehake .

GNU Extensions

Gawk duweni ekstensi kanggo POSIX awk . Padha diterangake ing bagean iki. Kabeh ekstensi sing diterangake ing kene bisa dipateni dening ngajak gawk kanthi pilihan - opsi.

Fitur ing ngisor iki saka gawk ora kasedhiya ing POSIX awk .

*

Ora ana panelusuran path ditindakake kanggo file sing dijenengi nganggo opsi -f . Mulane variabel lingkungan AWKPATH ora khusus.

*

Ing urutan x escape. (Disabled karo --posix .)

*

Fungsi fflush () . (Disabled karo --posix .)

*

Kemampuan kanggo terus baris sawise ? lan :. (Disabled karo --posix .)

*

Konstanta Octal lan hexadecimal ing program AWK.

*

Variabel ARGIND , BINMODE , ERRNO , LINT , RT lan TEXTDOMAIN ora khusus.

*

Variabel IGNORECASE lan efek samping ora kasedhiya.

*

Variabel FIELDWIDTHS lan pisah-lebar kolom pisah.

*

Array PROCINFO ora kasedhiya.

*

Panggunaan RS minangka ekspresi reguler.

*

Jeneng berkas khusus sing kasedhiya kanggo redireksi I / O ora diakoni.

*

| | | Operator kanggo nggawe co-proses.

*

Kemampuan kanggo pamisah karakter individu nggunakake string tanpa nada minangka nilai FS , lan minangka argumen katelu kanggo pamisah () .

*

Argumen kaloro pilihan kanggo fungsi cedhak () .

*

Argumen katelu pilihan kanggo fungsi () pencocokan .

*

Kemampuan kanggo nggunakake specifiers positional karo printf lan sprintf () .

*

Panggunaan hapus array kanggo mbusak kabeh isi saka array.

*

Panggunaan nextfile kanggo ngundurake file input saiki.

*

Tuladhane , lan () , asort () , bindtextdomain () , compl () , dcgettext () , gensub () , lshift () , mktime () , utawa () , rshift () , strftime () lan xor () fungsi.

*

Struktur lokal.

*

Nambah fungsi dibangun ing anyar kanthi dinamis kanthi fungsi ekstensi () .

Buku AWK ora netepake nilai bali saka cedhak () fungsi. Gawk cedhak () ngasilake angka saka fclose (3), utawa pclose (3), nalika nutup file utawa pipa output. Ngasilake status metu proses nalika nutup pipa input. Nilai bali punika -1 yen file sing dijenengi, pipa utawa proses bebarengan ora dibukak kanthi redirection.

Nalika gawk diwatesi karo opsi -, manawa argumen f menyang pilihan -F yaiku `'t' ', banjur FS disetel menyang karakter tab. Cathetan sing ngetik gawk -F \ t ... mung nimbulaké cangkang kanggo ngetik `` t, '', lan ora ngliwati `` \ t '' menyang opsi -F . Wiwit iki kasus khusus sing rada ala, ora perilaku standar. Prilaku iki uga ora kedadeyan yen - priksanasine wis ditemtokake. Kanggo nggoleki karakter tab minangka pemisah lapangan, luwih becik nggunakake sebutan tunggal: gawk -F '\ t' ....

Ndelok tulisan liyane : ngenteni , lp , lengkap , execv , getfacl , ioctl , uniq , rmmod , pvcreate , rsh , unix2dos , cal , fs , cd , iwpriv , swapon , autofs , talk , motd , free , lpr , execl , fdisk , ing , sing, iwconfig , ifconfig , vgdisplay , mbukak , lsmod , ntohs , mailq , mateni , wtmp