Alamin ang Linux Command - gawk

Pangalan

gawk - pattern sa pag-scan at pagpoproseso ng wika

Buod

gawk [POSIX o GNU style options] -f program-file [ - ] file ...
gawk [POSIX o GNU style options] [ - ] program-text file ...

pgawk [POSIX o mga pagpipilian sa estilo ng GNU] -f program-file [ - ] file ...
pgawk [POSIX o mga pagpipilian sa estilo ng GNU] [ - ] program-text file ...

Paglalarawan

Ang Gawk ay ang pagpapatupad ng GNU Project ng AWK programming language. Sumasang-ayon ito sa kahulugan ng wika sa POSIX 1003.2 Command Language And Utilities Standard. Ang bersyon na ito naman ay batay sa paglalarawan sa Wika ng AWK Programming , ni Aho, Kernighan, at Weinberger, kasama ang mga karagdagang tampok na natagpuan sa bersyon ng System V Release 4 ng UNIX awk . Nagbibigay din ang Gawk ng higit pang kamakailang mga extension ng Lab Laboratories, at isang bilang ng mga extension na partikular sa GNU.

Pgawk ay ang profile na bersyon ng gawk . Ito ay kapareho sa lahat ng paraan upang gawk , maliban na ang mga programa ay tumatakbo nang mas mabagal, at awtomatiko itong gumagawa ng pagpapatupad na profile sa file awkprof.out kapag tapos na. Tingnan ang - opsyon ng profile , sa ibaba.

Ang command line ay binubuo ng mga pagpipilian sa gawk mismo, ang teksto ng AWK program (kung hindi ibinibigay sa pamamagitan ng -f o - mga opsyon sa file ), at mga halaga na magagamit sa ARGV at ARGV na tinukoy na mga variable ng AWK.

Format ng Pagpipilian

Ang mga pagpipilian sa Gawk ay maaaring alinman sa tradisyonal na POSIX na isang opsyon sa sulat, o estilo ng GNU na mahahabang pagpipilian. Ang mga pagpipilian sa POSIX ay magsisimula sa isang `` - '', habang ang mga mahahabang pagpipilian ay nagsisimula sa `` - ''. Ang mga mahahalagang opsyon ay ibinibigay para sa parehong mga tampok na partikular sa GNU at para sa mga tampok na ipinag-utos ng POSIX.

Kasunod ng pamantayan ng POSIX, gawk-specific na mga pagpipilian ay ibinibigay sa pamamagitan ng mga argumento sa pagpipilian na -W . Maaaring maibigay ang mga pagpipilian sa Maraming -W Ang bawat pagpipilian sa W ay may katumbas na mahahabang pagpipilian, tulad ng nakadetalye sa ibaba. Ang mga argumento sa mga mahahabang opsyon ay maaaring sumali sa opsyon sa pamamagitan ng isang = sign, na walang mga espasyo sa pagitan, o maaaring sila ay ipagkakaloob sa susunod na argumento ng command line. Ang mga mahahalagang opsyon ay maaaring pinaikli, hangga't ang pagdadaglat ay nananatiling kakaiba.

Mga Opsyon

Tinatanggap ng Gawk ang mga sumusunod na opsyon, nakalista ayon sa alpabeto.

-F fs

- Field-separator fs Gumamit ng fs para sa separator ng input field (ang halaga ng variable na paunang natukoy na FS ).

-v var = val

--assign var = val Magtalaga ng halaga na val sa variable var , bago magsimula ang pagpapatupad ng programa. Ang ganitong mga variable na halaga ay magagamit sa BEGIN block ng isang programa ng AWK.

-f program-file

- File program-file Basahin ang AWK program source mula sa program file-file , sa halip na mula sa unang command line argument. Maaaring gamitin ang Maramihang -f (o - file ) na mga opsyon.

-mf NNN

-mr NNN Magtakda ng iba't ibang mga limitasyon sa memorya sa halaga ng NNN . Ang f flag ay nagtatakda ng pinakamataas na bilang ng mga patlang, at ang r flag ay nagtatakda ng pinakamataas na laki ng record. Ang dalawang flag at ang -m na pagpipilian ay mula sa pananaliksik na bersyon ng Laboratories ng UNIX awk . Sila ay binabalewala ng gawk , dahil ang gawk ay walang mga natukoy na limitasyon.

-W compat

-W tradisyonal

- kasama

- Patakaran Run sa mode na compatibility . Sa mode ng pagiging tugma, gawk ay kumikilos nang magkatulad sa UNIX awk ; wala sa mga extension ng GNU na tukoy na kinikilala. Ang paggamit ng -traditional ay ginustong sa iba pang mga paraan ng pagpipiliang ito. Tingnan ang GNU EXTENSIONS , sa ibaba, para sa karagdagang impormasyon.

-W copyleft

-W copyright

--copyleft

- kopya I-print ang maikling bersyon ng mensahe ng impormasyon sa copyright ng GNU sa karaniwang output at matagumpay na lumabas.

-W dump-variable [ = file ]

--dump-variables [ = file ] Mag-print ng isang pinagsunod-sunod na listahan ng mga pandaigdigang variable, ang kanilang mga uri at pangwakas na mga halaga upang mag- file . Kung walang ibinigay na file , gawk ay gumagamit ng isang file na pinangalanang awkvars.out sa kasalukuyang direktoryo.

Ang pagkakaroon ng isang listahan ng lahat ng mga pandaigdigang variable ay isang mahusay na paraan upang maghanap ng mga typographical error sa iyong mga programa. Gagamitin mo rin ang pagpipiliang ito kung mayroon kang malaking programa na may maraming mga function, at nais mong tiyakin na ang iyong mga pag-andar ay hindi sinasadyang gumagamit ng mga pandaigdigang variable na iyong sinadya upang maging lokal. (Ito ay isang madaling pagkakamali upang gumawa ng mga simpleng mga pangalan ng variable tulad ng i , j , at iba pa.)

-W tulong

-W paggamit

- Tumulong

- I-print I-print ang isang medyo maikling buod ng magagamit na mga opsyon sa karaniwang output. (Alinsunod sa GNU Coding Standards , ang mga pagpipilian na ito ay nagdudulot ng agarang, matagumpay na exit.)

-W lint [ = nakamamatay ]

--lint [ = nakamamatay ] Magbigay ng mga babala tungkol sa mga construct na kaduda-dudang o di-portable sa iba pang mga implementasyon ng IKAW. Gamit ang isang opsyonal na argumento ng nakamamatay , lint mga babala ay maging malalang mga error. Maaaring ito ay marahas, ngunit ang paggamit nito ay tiyak na hinihikayat ang pagpapaunlad ng malinis na mga programang AWK.

-W lint-old

--lint-old Magbigay ng mga babala tungkol sa mga construct na hindi portable sa orihinal na bersyon ng Unix awk .

-W gen-po

-gen-po I- scan at i-parse ang programa ng AWK, at bumuo ng isang file ng GNU .po format sa karaniwang output na may mga entry para sa lahat ng mga localizable na string sa programa. Ang programa mismo ay hindi pinaandar. Tingnan ang pamamahagi ng GNU gettext para sa karagdagang impormasyon sa .po file.

-W non-decimal-data

- Hindi-decimal-data Kilalanin ang mga octal at hexadecimal na mga halaga sa input data. Gamitin ang pagpipiliang ito nang may mahusay na pag-iingat!

-W posix

--posix Ito ay lumiliko sa compatibility mode, na may mga sumusunod na karagdagang mga paghihigpit:

*

Ang mga x sequence escape ay hindi kinikilala.

*

Tanging espasyo at tab kumilos bilang mga field separators kapag ang FS ay naka-set sa isang solong espasyo, ang newline ay hindi.

*

Hindi ka maaaring magpatuloy ng mga linya pagkatapos ? at :.

*

Ang kasingkahulugan na func para sa function ng keyword ay hindi kinikilala.

*

Ang mga operator ** at ** = ay hindi magagamit sa halip ng ^ at ^ = .

*

Ang fflush () function ay hindi magagamit.

-W profile [ = prof_file ]

--profile [ = prof_file ] Magpadala ng profile ng profiling sa prof_file . Ang default ay awkprof.out . Kapag tumatakbo sa gawk , ang profile ay isang `` medyo nakalimbag '' na bersyon ng programa. Kapag tumatakbo sa pgawk , ang profile ay naglalaman ng mga bilang ng pagpapatupad ng bawat pahayag sa programa sa kaliwang margin at function na mga bilang ng tawag para sa bawat function na tinukoy ng gumagamit.

-W muli ang agwat

--re-interval Paganahin ang paggamit ng mga expression sa pagitan sa regular na pagtutugma ng expression (tingnan ang Regular na Expression , sa ibaba). Ang mga expression ng interval ay hindi ayon sa tradisyonal na magagamit sa wika ng AWK. Ang POSIX standard ay idinagdag ang mga ito, upang gumawa ng awk at egrep pare-pareho sa bawat isa. Gayunpaman, ang kanilang paggamit ay malamang na pumutol sa mga lumang programa ng AWK, kaya nagbibigay lamang ang mga ito ng mga ito kung hiniling sila sa pagpipiliang ito, o kapag - tinukoy angposix .

-W source program-text

--Source- program na teksto Gumamit ng program-text bilang AWK program source code. Pinapayagan ng pagpipiliang ito ang madaling pagsasama ng mga function sa library (ginagamit sa pamamagitan ng -f at - mga opsyon sa file ) na may source code na ipinasok sa command line. Ito ay inilaan lalo na para sa medium hanggang malalaking programa ng AWK na ginagamit sa mga script ng shell.

-W bersyon

- Paglilista I-print ang impormasyon ng bersyon para sa partikular na kopya ng gawk sa karaniwang output. Ito ay kapaki-pakinabang para sa pangunahing kaalaman kung ang kasalukuyang kopya ng gawk sa iyong system ay napapanahon na may kaugnayan sa anumang ibinibigay ng Free Software Foundation. Kapaki-pakinabang din ito kapag nag-uulat ng mga bug. (Alinsunod sa GNU Coding Standards , ang mga pagpipilian na ito ay nagdudulot ng agarang, matagumpay na exit.)

- Lagyan ng signal ang dulo ng mga pagpipilian. Ito ay kapaki-pakinabang upang payagan ang karagdagang mga argumento sa AWK program mismo upang magsimula sa isang `` - ''. Ito ay higit sa lahat para sa pagkakapare-pareho sa kombensiyong pag-parse ng kombensyon na ginagamit ng karamihan sa iba pang mga programang POSIX.

Sa mode ng pagiging tugma, ang anumang iba pang mga pagpipilian ay na-flag bilang hindi wasto, ngunit kung hindi man ay hindi pinansin. Sa normal na operasyon, hangga't ibinigay ang teksto ng programa, ang mga di-alam na pagpipilian ay ipinapasa sa AWK program sa ARGV array para sa pagproseso. Ito ay partikular na kapaki-pakinabang para sa pagpapatakbo ng mga programa ng AWK sa pamamagitan ng mekanismo ng executable interpreter na `` #! '.

Pagpapatupad ng AWK PROGRAM

Ang isang AWK program ay binubuo ng isang pagkakasunud-sunod ng mga pahayag ng pattern-action at mga opsyonal na opsyonal na function.

pattern { action statements }

pangalan ng function ( listahan ng parameter ) (mga pahayag )

Gawk unang bumabasa ng pinagmulan ng programa mula sa program-file (s) kung tinukoy, mula sa mga argumento sa --source , o mula sa unang di-opsyon na argument sa command line. Maaaring gamitin ang mga opsyon ng -f at --source nang maraming beses sa command line. Binabasa ni Gawk ang teksto ng programa na parang ang lahat ng mga program-file s at command line source na mga teksto ay isinama nang magkasama. Ito ay kapaki-pakinabang para sa mga gusali ng mga aklatan ng mga function ng AWK, nang hindi kinakailangang isama ang mga ito sa bawat bagong programa ng AWK na gumagamit ng mga ito. Nagbibigay din ito ng kakayahang paghaluin ang mga function ng library sa mga program ng command line.

Tinutukoy ng variable ng kapaligiran AWKPATH ang path ng paghahanap upang magamit kapag naghahanap ng mga file ng pinagmulan na pinangalanan sa -f na opsiyon. Kung hindi umiiral ang variable na ito, ang default path ay ".: / Usr / local / share / awk" . (Ang aktwal na direktoryo ay maaaring mag-iba, depende sa kung paano gawk ay binuo at naka-install.) Kung ang isang pangalan ng file na ibinigay sa -f na opsiyon ay naglalaman ng isang `` / '' na character, walang paghahanap ng landas ay ginanap.

Gawk ay nagsasagawa ng mga programa ng AWK sa sumusunod na order. Una, ang lahat ng mga takdang variable na tinukoy sa pamamagitan ng -v na opsiyon ay ginaganap. Susunod, gawk compiles ang programa sa isang panloob na form. Pagkatapos, gawk executes ang code sa BEGIN block (s) (kung mayroon), at pagkatapos ay nalikom upang basahin ang bawat file na pinangalanan sa ARGV array. Kung walang mga file na pinangalanan sa command line, gawk bumabasa ng karaniwang input.

Kung ang isang filename sa command line ay may form na var = val ito ay ginagamot bilang isang variable assignment. Ang variable var ay bibigyan ng val value. (Ito ay nangyayari pagkatapos ng anumang mga block na BEGIN (s) na naubusan.) Ang kapalit ng variable ng command line ay pinaka kapaki-pakinabang para sa dynamic na pagtatalaga ng mga halaga sa mga variable na gumagamit ng AWK upang makontrol kung paano na-input ang mga patlang at mga talaan. Kapaki-pakinabang din ito para sa pagkontrol ng estado kung maraming mga pagpasa ang kinakailangan sa isang solong file ng data.

Kung ang halaga ng isang partikular na sangkap ng ARGV ay walang laman ( "" ), ang mga gawk ay naglalabas dito.

Para sa bawat record sa input, gawk tests upang makita kung tumutugma ito sa anumang pattern sa programa ng AWK. Para sa bawat pattern na tumutugma ang rekord, ang nauugnay na pagkilos ay isinasagawa. Ang mga pattern ay sinubukan sa pagkakasunod-sunod na nagaganap sa programa.

Sa wakas, matapos ang lahat ng pag-input ay naubos na, gawk ay nagpapatupad ng code sa END block (s) (kung mayroon man).

Variable, Records, at Fields

Ang mga variable ng AWK ay pabago-bago; sila ay nabubuhay kapag sila ay unang ginamit. Ang kanilang mga halaga ay alinman sa lumulutang-point na mga numero o mga string, o pareho, depende sa kung paano ginagamit ang mga ito. Ang AWK ay mayroon ding isang dimensional na arrays; Ang mga array na may maraming dimensyon ay maaaring kunwa. Ang ilang mga paunang natukoy na mga variable ay nakatakda bilang isang programa na nagpapatakbo; ang mga ito ay inilarawan bilang kinakailangan at summarized sa ibaba.

Mga rekord

Karaniwan, ang mga tala ay pinaghihiwalay ng mga bagong linya ng character. Maaari mong kontrolin kung paano pinaghihiwalay ang mga talaan sa pamamagitan ng pagtatalaga ng mga halaga sa built-in na variable RS . Kung ang RS ay walang iisang karakter, ang character na ito ay naghihiwalay ng mga tala. Kung hindi, ang RS ay isang regular na expression. Ang teksto sa input na tumutugma sa regular na expression na ito ay naghihiwalay sa talaan. Gayunpaman, sa mode ng pagkakatugma, tanging ang unang character ng string string nito ang ginagamit para sa paghihiwalay ng mga tala. Kung ang RS ay naka-set sa null string, ang mga tala ay pinaghihiwalay ng mga blangko na linya. Kapag ang RS ay naka-set sa null string, ang newline character ay laging kumikilos bilang isang field separator, bilang karagdagan sa anumang halaga na maaaring makuha ng FS .

Mga Patlang

Habang binabasa ang bawat rekord ng pag-input, hinihiwa ng gawk ang rekord sa mga patlang , gamit ang halaga ng FS variable bilang field separator. Kung ang FS ay isang solong character, ang mga patlang ay pinaghiwalay ng character na iyon. Kung ang FS ay ang null string, ang bawat indibidwal na karakter ay nagiging isang hiwalay na larangan. Kung hindi, ang FS ay inaasahan na maging isang buong regular na expression. Sa espesyal na kaso na ang FS ay isang solong espasyo, ang mga patlang ay pinaghihiwalay ng mga pagpapatakbo ng mga puwang at / o mga tab at / o mga bagong linya. (Ngunit tingnan ang talakayan ng - poste , sa ibaba). TANDAAN: Ang halaga ng IGNORECASE (tingnan sa ibaba) ay nakakaapekto rin kung paano nahati ang mga patlang kapag ang FS ay isang regular na expression, at kung paano ang mga talaan ay pinaghihiwalay kapag ang RS ay isang regular na expression.

Kung ang variable na FIELDWIDTHS ay naka-set sa isang listahan ng mga numero na pinaghihiwalay ng espasyo, ang bawat patlang ay inaasahang magkaroon ng naayos na lapad, at pinaghihiwa ang rekord gamit ang tinukoy na lapad. Ang halaga ng FS ay hindi pinansin. Ang pagtatalaga ng isang bagong halaga sa FS ay binabawasan ang paggamit ng FIELDWIDTHS , at ibalik ang default na pag-uugali.

Ang bawat field sa rekord ng pag-input ay maaaring ma-reference sa posisyon nito, $ 1 , $ 2 , at iba pa. Ang $ 0 ay ang buong tala. Ang mga patlang ay hindi dapat na isinangguni ng mga constants:

n = 5
print $ n

print ang ikalimang patlang sa rekord ng input.

Ang variable na NF ay nakatakda sa kabuuang bilang ng mga patlang sa rekord ng input.

Ang mga sanggunian sa mga di-umiiral na mga patlang (ie mga patlang pagkatapos ng $ NF ) ay gumagawa ng null-string. Gayunpaman, ang pagtatalaga sa isang di-umiiral na larangan (hal., $ (NF + 2) = 5 ) ay nagpapataas sa halaga ng NF , lumilikha ng anumang mga patlang na nakakasagabal sa null string bilang kanilang halaga, at nagiging sanhi ng halaga ng $ 0 upang ma-recomputed, ang mga patlang na pinaghiwalay ng halaga ng mga OFS . Ang mga reference sa mga negatibong field na may bilang ay nagiging sanhi ng isang malalang error. Ang pagbabawas ng NF ay nagdudulot ng mga halaga ng mga patlang na nakalipas na ang bagong halaga ay mawawala, at ang halaga ng $ 0 ay maituturing muli, na ang mga patlang ay pinaghihiwalay ng halaga ng OFS .

Ang pagtatalaga ng isang halaga sa isang umiiral na patlang ay nagpapahiwatig na ang buong rekord ay muling itatayo kapag ang $ 0 ay isinangguni. Katulad nito, ang pagtatalaga sa isang halaga sa $ 0 ay nagiging sanhi ng pagkakasunod-sunod ng resibo, paglikha ng mga bagong halaga para sa mga patlang.

Mga Built-in na Variable

Ang mga built-in na variable ng Gawk ay:

ARGC

Ang bilang ng mga argumento ng command line (hindi kasama ang mga pagpipilian sa gawk , o ang source ng programa).

ARGIND

Ang index sa ARGV ng kasalukuyang file na naproseso.

ARGV

Array ng argumento ng command line. Ang array ay na-index mula 0 hanggang ARGC - 1. Ang dynamic na pagbabago ng mga nilalaman ng ARGV ay maaaring makontrol ang mga file na ginagamit para sa data.

BINMODE

Sa mga di-POSIX na sistema, tumutukoy sa paggamit ng mode ng `` binary '' para sa lahat ng file na I / O. Ang mga numerong halaga ng 1, 2, o 3, ay tumutukoy na ang mga input file, output file, o lahat ng mga file, ayon sa pagkakabanggit, ay dapat gumamit ng binary I / O. Ang mga halaga ng string ng "r" , o "w" ay tumutukoy na ang mga input file, o output file, ayon sa pagkakabanggit, ay dapat gumamit ng binary I / O. Ang mga halaga ng string ng "rw" o "wr" ay tumutukoy na ang lahat ng mga file ay dapat gumamit ng binary I / O. Ang anumang ibang halaga ng string ay itinuturing bilang "rw" , ngunit bumubuo ng isang babalang mensahe.

CONVFMT

Ang format ng conversion para sa mga numero, "% .6g" , bilang default.

ENVIRON

Isang array na naglalaman ng mga halaga ng kasalukuyang kapaligiran. Ang array ay na-index ng mga variable ng kapaligiran, ang bawat elemento ay ang halaga ng variable na iyon (hal., ENVIRON ["HOME") ay maaaring / home / arnold ). Ang pagpapalit ng array na ito ay hindi nakakaapekto sa kapaligiran na nakikita ng mga programa kung saan ang gawk ay nagpapalitaw sa pamamagitan ng pag-redirect o ang sistema () function.

ERRNO

Kung ang isang error sa system ay nangyayari alinman sa paggawa ng redirection para sa getline , sa panahon ng isang read para sa getline , o sa panahon ng isang malapit () , pagkatapos ERRNO ay naglalaman ng isang string na naglalarawan ng error. Ang halaga ay napapailalim sa pagsasalin sa mga hindi lokal na Ingles.

FIELDWIDTHS

Ang isang puting-espasyo na pinaghiwalay na listahan ng mga fieldwidth. Kapag naka-set, gawk parses ang input sa mga patlang ng nakapirming lapad, sa halip ng paggamit ng halaga ng FS variable bilang ang field separator.

FILENAME

Ang pangalan ng kasalukuyang input file. Kung walang tinukoy na mga file sa command line, ang halaga ng FILENAME ay `` - ''. Gayunpaman, ang FILENAME ay hindi natukoy sa loob ng block ng BEGIN (maliban kung itinakda ng getline ).

FNR

Ang input record number sa kasalukuyang input file.

FS

Ang input field separator, isang puwang sa pamamagitan ng default. Tingnan ang Mga Field , sa itaas.

IGNORECASE

Kinokontrol ang case-sensitivity ng lahat ng regular na expression at mga operasyon ng string. Kung ang IGNORECASE ay may di-zero na halaga, pagkatapos ay ang mga paghahambing ng string at pagtutugma ng pattern sa mga panuntunan, field splitting na may FS , record na nakahiwalay sa RS , regular na pagtutugma ng pagtutugma sa ~ at ! ~ , At gensub () , gsub () , index () , tugma () , split () , at sub () built-in na mga pag-andar ang lahat ng kaso kapag gumagawa ng mga regular na pagpapatakbo ng expression. TALA: Hindi nakaapekto ang subscripting ng array, o ang function na asort () .

Kaya, kung ang IGNORECASE ay hindi katumbas ng zero, / aB / tumutugma sa lahat ng mga string na "ab" , "aB" , "Ab" , at "AB" . Tulad ng lahat ng mga variable ng AWK, ang unang halaga ng IGNORECASE ay zero, kaya ang lahat ng regular na ekspresyon at mga operasyon ng string ay karaniwang sensitibo sa kaso. Sa ilalim ng Unix, ang buong ISO 8859-1 Latin-1 character set ay ginagamit kapag hindi papansinin ang kaso.

LINT

Nagbibigay ng dynamic na kontrol ng pagpipiliang lint mula sa loob ng isang programa ng AWK. Kapag totoo, ang gawk ay nagpi- print ng mga babala ng lint. Kapag mali, hindi. Kapag nakatalaga ang halaga ng string na "nakamamatay" , ang mga babala ng lint ay nagiging mga nakamamatay na mga pagkakamali, eksakto tulad ng --lint = nakamamatay . Ang anumang iba pang tunay na halaga ay nag-i-print lamang ng mga babala.

NF

Ang bilang ng mga patlang sa kasalukuyang rekord ng pag-input.

NR

Ang kabuuang bilang ng mga talaan ng input ay nakikita sa ngayon.

OFMT

Ang format ng output para sa mga numero, "% .6g" , bilang default.

OFS

Ang output field separator, isang puwang sa pamamagitan ng default.

ORS

Ang output separator record, sa pamamagitan ng default isang newline.

PROCINFO

Ang mga elemento ng array na ito ay nagbibigay ng access sa impormasyon tungkol sa pagpapatakbo ng AWK program. Sa ilang mga sistema, maaaring may mga elemento sa array, "group1" sa pamamagitan ng "group n " para sa ilang mga n , na kung saan ay ang bilang ng mga karagdagang mga grupo na ang proseso ay may. Gamitin ang operator sa pagsubok para sa mga elementong ito. Ang mga sumusunod na elemento ay garantisadong magagamit:

PROCINFO ["egid"]

ang halaga ng getegid (2) system call.

PROCINFO ["euid"]

ang halaga ng geteuid (2) system call.

PROCINFO ["FS"]

"FS" kung ang field na nahati sa FS ay may bisa , o "FIELDWIDTHS" kung ang patlang na may malakas na FIELDWIDTHS ay may bisa .

PROCINFO ["gid"]

ang halaga ng getgid (2) na sistema ng tawag.

PROCINFO ["pgrpid"]

ang process group ID ng kasalukuyang proseso.

PROCINFO ["pid"]

ang proseso ng ID ng kasalukuyang proseso.

PROCINFO ["ppid"]

ang proseso ng magulang ng ID ng kasalukuyang proseso.

PROCINFO ["uid"]

ang halaga ng getuid (2) system call.

RS

Ang input record separator, sa pamamagitan ng default isang newline.

RT

Ang terminator ng rekord. Ang Gawk ay nagtatakda ng RT sa text ng input na tumutugma sa character o regular na expression na tinukoy ng RS .

RSTART

Ang index ng unang karakter na naitugma sa pamamagitan ng tugma () ; 0 kung walang tugma. (Ipinapahiwatig nito na nagsisimula ang mga indeks ng character.)

RLENGTH

Ang haba ng string na naitugma sa pamamagitan ng tugma () ; -1 kung walang tugma.

SUBSEP

Ang character na ginamit upang paghiwalayin ang maraming mga subscript sa mga elemento ng array, sa pamamagitan ng default na "\ 034" .

TEXTDOMAIN

Ang domain ng teksto ng programa ng AWK; ginagamit upang mahanap ang naisalokal na mga pagsasalin para sa mga string ng programa.

Mga Arrays

Ang mga array ay naka-subscript sa isang expression sa pagitan ng mga square bracket ( [ at ] ). Kung ang expression ay isang listahan ng ekspresyon ( expr , expr ...) pagkatapos ang array subscript ay isang string na binubuo ng pagsasama ng (string) na halaga ng bawat expression, na pinaghihiwalay ng halaga ng variable ng SUBSEP . Ang pasilidad na ito ay ginagamit upang gayahin ang multiply dimensioned arrays. Halimbawa:

i = "A"; j = "B"; k = "C"
x [i, j, k] = "halo, mundo \ n"

nagtatalaga ng string na "halo, mundo \ n" sa elemento ng array x na na-index ng string na "A \ 034B \ 034C" . Ang lahat ng mga arrays sa AWK ay nag-uugnay, ibig sabihin, na-index ng mga halaga ng string.

Ang espesyal na operator sa ay maaaring gamitin sa isang kung o habang pahayag upang makita kung ang isang array ay may index na binubuo ng isang partikular na halaga.

kung (val sa array) print array [val]

Kung ang array ay may maraming mga subscript, gamitin ang (i, j) sa array .

Ang sa construct ay maaari ring gamitin sa isang para sa loop upang umulit sa lahat ng mga elemento ng isang array.

Ang isang elemento ay maaaring matanggal mula sa isang array gamit ang delete statement. Ang delete statement ay maaari ding gamitin upang tanggalin ang buong nilalaman ng isang array, sa pamamagitan lamang ng pagtukoy sa pangalan ng array nang walang isang subscript.

Variable Typing And Conversion

Ang mga variable at mga patlang ay maaaring (floating point) na mga numero, o mga string, o pareho. Kung paano ang kahulugan ng isang variable ay binibigyang-kahulugan depende sa konteksto nito. Kung ginamit sa isang numerong expression, ito ay itinuturing bilang isang numero, kung ginamit bilang isang string ito ay itinuturing bilang isang string.

Upang pilitin ang isang variable na tratuhin bilang isang numero, magdagdag ng 0 dito; upang pilitin itong isaalang-alang bilang isang string, idugtong ito sa null string.

Kapag ang isang string ay dapat na-convert sa isang numero, ang conversion ay natapos gamit ang strtod (3). Ang isang numero ay na-convert sa isang string sa pamamagitan ng paggamit ng halaga ng CONVFMT bilang isang string ng format para sa sprintf (3), na may numerong halaga ng variable bilang argumento. Gayunpaman, kahit na ang lahat ng mga numero sa AWK ay lumulutang-point, ang mga integral na halaga ay laging na- convert bilang integer. Kaya, ibinigay

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

ang variable b ay may string na halaga ng "12" at hindi "12.00" .

Gawk ay nagsasagawa ng mga paghahambing tulad ng sumusunod: Kung ang dalawang mga variable ay numeric, inihambing ito ayon sa bilang. Kung ang isang halaga ay numeric at ang iba ay may string na halaga na isang `` numeric string, '' at pagkatapos ay ang mga paghahambing ay tapos na rin ayon sa bilang. Kung hindi, ang numerong halaga ay na-convert sa isang string at isang paghahambing ng string ay ginanap. Dalawang mga string ay inihambing, siyempre, bilang mga string. Tandaan na ang standard na POSIX ay sumasaklaw sa konsepto ng `` numeric string '' sa lahat ng dako, kahit na sa constants ng string. Gayunpaman, maliwanag na mali ito, at hindi ito ginagawa. (Sa kabutihang palad, ito ay naayos sa susunod na bersyon ng pamantayan.)

Tandaan na ang constants ng string, tulad ng "57" , ay hindi mga numerong string, ang mga ito ay constants ng string. Nalalapat lamang ang ideya ng `` numeric string '' sa mga patlang, getline input, FILENAME , elemento ng ARGV , ENVIRON elemento at mga elemento ng isang array na nilikha ng split () na numeric na mga string. Ang pangunahing ideya ay ang input ng gumagamit , at ang tanging input ng user, na mukhang numeric, ay dapat tratuhin sa ganoong paraan.

Ang mga hindi nabagong mga variable ay may numerong halaga 0 at ang halaga ng string "" (ang null, o walang laman, string).

Octal at Hexadecimal Constants

Simula sa bersyon 3.1 ng gawk, maaari kang gumamit ng C-style octal at hexadecimal constants sa iyong AWK program source code. Halimbawa, ang halaga ng octal 011 ay katumbas ng decimal 9 , at ang hexadecimal na halaga 0x11 ay katumbas ng decimal 17.

String Constants

Ang mga string na constants sa AWK ay mga pagkakasunud-sunod ng mga character na nakapaloob sa pagitan ng double quotes ( " ). Sa loob ng mga string, ang mga pagkakasunod - sunod ng escape ay kinikilala, tulad ng sa C. Ang mga ito ay:

\\

Isang literal na backslash.

\ a

Ang `` alerto '' na character; kadalasan ang karakter ng ASCII BEL.

\ b

backspace.

\ f

form-feed.

\ n

bagong linya.

\ r

bumalik ang karwahe.

\ t

pahalang na tab.

\ v

vertical na tab.

\ x hex digit

Ang karakter na kinakatawan ng string ng mga hexadecimal digit na sumusunod sa \ x . Tulad ng sa ANSIC, ang lahat ng mga sumusunod na mga hexadecimal digit ay itinuturing na bahagi ng pagkakasunod-sunod ng pagtakas. (Ang tampok na ito ay dapat sabihin sa amin ng isang bagay tungkol sa disenyo ng wika ng komite.) Halimbawa, "\ x1B" ang ASCIIESC (escape) na character.

\ ddd

Ang karakter na kinakatawan ng 1-, 2, o 3-digit na pagkakasunod-sunod ng mga octal digit. Halimbawa, "\ 033" ang character na ASCII ESC (escape).

\ c

Ang literal na karakter c .

Ang mga pagkakasunod-sunod ng escape ay maaari ding gamitin sa loob ng mga regular na regular na expression (halimbawa, / [\ t \ f \ n \ r \ v] / tumutugma sa mga character na whitespace).

Sa mode ng pagiging tugma, ang mga character na kinakatawan ng mga octal at hexadecimal escape sequence ay ginagamot literal kapag ginamit sa regular na constants expression. Kaya, / a \ 52b / ay katumbas sa / a \ * b / .

Mga Pattern at Pagkilos

Ang AWK ay isang wika na nakatuon sa linya. Ang pattern ay una, at pagkatapos ay ang aksyon. Ang mga pahayag ng pagkilos ay nakapaloob sa { at } . Ang alinman sa pattern ay maaaring nawawala, o ang pagkilos ay maaaring nawawala, ngunit, siyempre, hindi pareho. Kung nawawala ang pattern, ang pagkilos ay isinasagawa para sa bawat solong talaan ng input. Ang nawawalang pagkilos ay katumbas ng

{print}

kung saan naka-print ang buong record.

Ang mga komento ay nagsisimula sa character na `` # '', at magpapatuloy hanggang sa katapusan ng linya. Ang mga blankong linya ay maaaring gamitin upang paghiwalayin ang mga pahayag. Karaniwan, ang isang pahayag ay nagtatapos sa isang bagong linya, gayunpaman, hindi ito ang kaso para sa mga linya na nagtatapos sa isang ``, '', { , ? , : , && , o || . Mga linya na nagtatapos sa gawin o iba pa ay mayroon ding kanilang mga pahayag ay awtomatikong patuloy sa mga sumusunod na linya. Sa ibang mga kaso, ang isang linya ay maaaring ipagpatuloy sa pamamagitan ng pagtatapos nito sa isang ', kung saan ang bagong linya ay hindi papansinin.

Maramihang mga pahayag ay maaaring ilagay sa isang linya sa pamamagitan ng paghihiwalay ng mga ito sa isang ``; ''. Nalalapat ito sa parehong mga pahayag sa loob ng aksyon na bahagi ng isang pares ng pattern-action (ang karaniwang kaso), at sa mga pahayag ng pattern-action mismo.

Mga Pattern

Ang mga pattern ng AWK ay maaaring isa sa mga sumusunod:

BEGIN END / regular expression / relational expression pattern & & pattern pattern || pattern pattern ? pattern : pattern ( pattern ) ! pattern pattern1 , pattern2

BEGIN at END ay dalawang espesyal na uri ng mga pattern na hindi sinubok laban sa input. Ang mga bahagi ng aksyon ng lahat ng BEGIN mga pattern ay pinagsama na kung ang lahat ng mga pahayag ay nakasulat sa isang solong BEGIN block. Isinasagawa ang mga ito bago mabasa ang anumang input. Katulad nito, ang lahat ng mga bloke ng END ay pinagsama, at isinagawa kapag ang lahat ng input ay naubos na (o kapag ang isang pahayag ng exit ay naisakatuparan). Ang mga simula ng BEGIN at END ay hindi maaaring isama sa iba pang mga pattern sa mga expression ng pattern. Ang mga pattern ng BEGIN at END ay hindi maaaring magkaroon ng mga nawawalang bahagi ng pagkilos.

Para sa / regular expression / pattern, ang nauugnay na pahayag ay isinasagawa para sa bawat rekord ng input na tumutugma sa regular na expression. Ang mga regular na expression ay katulad ng sa mga sa egrep (1), at summarized sa ibaba.

Maaaring gamitin ng isang ekspresyon sa pamanggit ang alinman sa mga operator na tinukoy sa ibaba sa seksyon ng mga aksyon. Ang mga ito sa pangkalahatan ay sumusubok kung ang ilang mga patlang ay tumutugma sa ilang mga regular na expression.

Ang && , || , at ! ang mga operator ay lohikal AT, lohikal O, at lohikal na HINDI, ayon sa pagkakabanggit, tulad ng sa C. Ginagawa nila ang pagsusuri ng maikling circuit, gayundin sa C, at ginagamit para sa pagsasama ng higit pang mga primitive na expression ng pattern. Tulad ng sa karamihan ng mga wika, ang mga panaklong ay maaaring gamitin upang baguhin ang pagkakasunud-sunod ng pagsusuri.

Ang operator : ay katulad ng parehong operator sa C. Kung ang unang pattern ay totoo pagkatapos ang pattern na ginagamit para sa pagsubok ay ang pangalawang pattern, kung hindi man ito ang pangatlong. Isa lamang sa ikalawa at ikatlong pattern ang sinusuri.

Ang pattern1 , pattern2 form ng isang expression ay tinatawag na isang hanay ng pattern . Ito ay tumutugma sa lahat ng mga tala ng input na nagsisimula sa isang tala na tumutugma sa pattern1 , at patuloy hanggang sa isang tala na tumutugma sa pattern2 , kasama. Hindi ito pagsamahin sa anumang iba pang uri ng pagpapahayag ng pattern.

Regular Expression

Regular na expression ay ang pinahaba uri na matatagpuan sa egrep . Ang mga ito ay binubuo ng mga character tulad ng sumusunod:

c

tumutugma sa non-metacharacter c .

\ c

tumutugma sa literal na karakter c .

.

tumutugma sa anumang karakter kabilang ang newline.

^

tumutugma sa simula ng isang string.

$

tumutugma sa dulo ng isang string.

[ abc ... ]

listahan ng character, tumutugma sa alinman sa mga character abc ....

[^ abc ... ]

Ang negatibong listahan ng character, tumutugma sa anumang karakter maliban abc ....

r1 | r2

Ang alternation: tumutugma sa r1 o r2 .

r1r2

pagsasama: tumutugma sa r1 , at pagkatapos ay r2 .

r +

tumutugma sa isa o higit pang r 's.

r *

tumutugma sa zero o higit pa r 's.

r ?

tumutugma sa zero o one r 's.

( r )

pagpapangkat: tumutugma r .

r { n }

r { n ,}

r { n , m } Ang isa o dalawang numero sa loob ng mga brace ay tumutukoy sa isang interval na expression . Kung mayroong isang numero sa mga tirante, ang naunang regular na expression ay paulit-ulit na n beses. Kung mayroong dalawang numero na pinaghihiwalay ng isang kuwit, ang r ay paulit-ulit n hanggang m beses. Kung mayroong isang numero na sinusundan ng isang kuwit, pagkatapos ay r ay paulit-ulit na hindi bababa sa n beses.

Magagamit lamang ang mga expression ng pagitan kung ang alinman - - o sa - re-interval ay tinukoy sa command line.

\ y

tumutugma sa walang laman na string sa simula o sa dulo ng isang salita.

\ B

tumutugma sa walang laman na string sa loob ng isang salita.

\ <

tumutugma sa walang laman na string sa simula ng isang salita.

\>

tumutugma sa walang laman na string sa dulo ng isang salita.

\ w

tumutugma sa anumang karakter na salin sa salita (titik, digit, o salungguhit).

\ W

tumutugma sa anumang karakter na hindi taglay ng salita.

\ `

tumutugma sa walang laman na string sa simula ng isang buffer (string).

'

tumutugma sa walang laman na string sa dulo ng isang buffer.

Ang mga pagkakasunod-sunod na makatakas na wasto sa constants string (tingnan sa ibaba) ay may bisa din sa mga regular na expression.

Ang mga klase ng character ay isang bagong tampok na ipinakilala sa pamantayan ng POSIX. Ang isang klase ng character ay isang espesyal na notation para sa naglalarawan ng mga listahan ng mga character na may isang tiyak na katangian, ngunit kung saan ang aktwal na mga character sa kanilang sarili ay maaaring mag-iba mula sa bansa sa bansa at / o mula sa character set sa character set. Halimbawa, ang kuru-kuro ng kung ano ang isang alpabetikong karakter ay naiiba sa USA at sa France.

Ang isang klase ng character ay may bisa lamang sa isang regular na expression sa loob ng mga braket ng isang listahan ng character. Ang mga klase ng character ay binubuo ng [: , isang keyword na nagpapahiwatig ng klase, at :] . Ang mga klase ng character na tinukoy sa pamantayan ng POSIX ay:

[: alnum:]

Alphanumeric character.

[: alpha:]

Mga alpabetong character.

[: blangko:]

Mga character ng space o tab.

[: cntrl:]

Kontrolin ang mga character.

[: digit:]

Mga numerong character.

[: graph:]

Mga karakter na kapwa-print at nakikita. (Ang espasyo ay maaaring i-print, ngunit hindi nakikita, habang ang isang ay pareho.)

[: mas mababa:]

Mga alpabetikong karakter sa lower case.

[: print:]

Napi-print na mga character (mga character na hindi kinokontrol ang mga character.)

[: punct:]

Mga simbolo ng punctuation (mga character na hindi titik, mga digit, mga character na kontrol, o mga character na espasyo).

[:space:]

Space character (tulad ng espasyo, tab, at formfeed, upang pangalanan ang ilan).

[: itaas:]

Mga alpabetikong character sa itaas na kaso.

[: xdigit:]

Mga character na hexadecimal digit.

Halimbawa, bago ang pamantayan ng POSIX, upang tumugma sa mga alphanumeric character, kakailanganin mong isulat / [A-Za-z0-9] / . Kung ang iyong character set ay may iba pang mga alpabetikong character dito, hindi ito tumutugma sa mga ito, at kung ang iyong character ay nai-collated nang magkakaiba mula sa ASCII, hindi ito maaaring tumugma sa mga karakter sa alphanumeric ng ASCII. Sa klase ng POSIX character, maaari mong isulat ang / [[: alnum:]] / , at tumutugma ito sa alpabetikong at numerong character sa iyong character set.

Maaaring lumitaw ang dalawang karagdagang mga espesyal na pagkakasunod-sunod sa mga listahan ng character. Nalalapat ang mga ito sa mga set ng character na hindi ASCII, na maaaring magkaroon ng mga single symbol (tinatawag na collating element ) na kinakatawan ng higit sa isang character, pati na rin ang ilang mga character na katumbas para sa pag- collating , o pag-uuri, mga layunin. (Halimbawa, sa Pranses, isang plain `` e '' at isang libingan-accented e` ay katumbas.)

Mga Collating na Mga Simbolo

Ang isang collating na simbolo ay isang elemento ng collating ng maraming character na nakapaloob sa [. at .] . Halimbawa, kung ang ch ay isang collating elemento, ang [[.ch.]] Ay isang regular na expression na tumutugma sa sangkap na collating na ito, habang ang [ch] ay isang regular na expression na tumutugma sa alinman sa c o h .

Pagkapantay-pantay na Mga Klase

Ang klase ng pagkapareho ay isang pangalan na tukoy sa locale para sa isang listahan ng mga character na katumbas. Ang pangalan ay nakapaloob sa [= at =] . Halimbawa, ang pangalan e ay maaaring gamitin upang kumatawan sa lahat ng `` e, '' `` e ',' 'at `` e`.' 'Sa kasong ito, [[= e =]] ay isang regular na expression na tumutugma sa anuman sa e , e ' , o e` .

Ang mga tampok na ito ay napakahalaga sa mga lokal na hindi nagsasalita ng Ingles. Ang mga pag-andar ng library na gumagamit ng gawk para sa regular na pagtutugma ng expression ay kasalukuyang kinikilala lamang ang mga klase sa POSIX na karakter; hindi nila kinikilala ang mga simbolo ng pag-collate o mga klase sa pagkapantay.

Ang \ y , \ B , \ < , \> , \ w , \ W , \ , at \ ' operator ay tiyak sa gawk ; ang mga ito ay mga extension batay sa mga pasilidad sa mga regular na pampublikong expression ng GNU.

Ang iba't-ibang mga pagpipilian sa command line ay kinokontrol kung paano nagbibigay-kahulugan ang mga character sa mga regular na expression.

Walang mga pagpipilian

Sa default na kaso, gawk nagbibigay ng lahat ng mga pasilidad ng POSIX regular na expression at angGNU regular na ekspresyon ng ekspresyon na inilarawan sa itaas. Gayunpaman, ang mga expression sa pagitan ay hindi sinusuportahan.

--posix

Ang POSIX lamang na mga regular na expression ay sinusuportahan, ang mga operator ng GNU ay hindi espesyal. (Hal., Ang w ay tumutugma sa literal na w ). Pinapayagan ang mga expression ng pagitan.

--traditional

Ang mga tradisyunal na Unix awk regular na mga expression ay naitugmang. Ang mga operator ng GNU ay hindi espesyal, ang mga ekspresyon ng agwat ay hindi magagamit, at hindi rin ang mga klase ng POSIX character ( [[: alnum:]] at iba pa). Ang mga character na inilarawan sa pamamagitan ng mga pagkakasunud-sunod ng octal at hexadecimal escape ay literal na itinuturing, kahit na ang mga ito ay kumakatawan sa mga regular na expression na metacharacters.

--re-pagitan

Pahintulutan ang mga expression ng interval sa mga regular na expression, kahit na - ang batayan ay ibinigay.

Pagkilos

Ang mga pahayag ng pagkilos ay nakapaloob sa mga tirante, { at } . Ang mga pahayag ng pagkilos ay binubuo ng karaniwang takdang-aralin, kondisyon, at pang-loop na mga pahayag na matatagpuan sa karamihan ng mga wika. Ang mga operator, control statement, at mga pahayag ng input / output na magagamit ay naka-pattern pagkatapos ng mga nasa C.

Mga operator

Ang mga operator sa AWK, sa pagkakasunud-sunod ng pagbaba ng precedence, ay

( ... )

Pagpapangkat

$

Reference ng patlang.

++ -

Pag-iipon at pag-decrement, parehong prefix at postfix.

^

Ang exponentiation ( ** ay maaari ding gamitin, at ** = para sa operator ng assignment).

+ -!

Unary plus, unary minus, at lohikal na negasyon.

* /%

Pagpaparami, paghahati, at modulus.

+ -

Pagdagdag at pagbawas.

space

String concatenation.

<>

<=> =

! = == Ang mga regular na operator sa pamanggit.

~! ~

Pagtutugma ng regular na expression, hindi tumutugma sa tugma. TANDAAN: Huwag gumamit ng palagiang regular na expression ( / foo / ) sa kaliwang bahagi ng isang ~ o ! ~ . Gumamit lamang ng isa sa kanang bahagi. Ang expression / foo / ~ exp ay may parehong kahulugan bilang (($ 0 ~ / foo /) ~ exp ) . Ito ay karaniwang hindi kung ano ang nilayon.

sa

Pagiging miyembro ng Array.

&&

Lohikal AT.

||

Lohikal O.

?:

Ang conditional expression ng C. Ito ay ang form expr1 ? expr2 : expr3 . Kung expr1 ay totoo, ang halaga ng expression ay expr2 , kung hindi, ito ay expr3 . Isa lamang sa expr2 at expr3 ang sinusuri.

= + = - =

* = / =% = ^ = Pagtatalaga. Ang parehong absolutong assignment ( var = value ) at operator-assignment (ang iba pang mga form) ay suportado.

Mga Pahayag ng Pagkontrol

Ang mga kontrol na pahayag ay ang mga sumusunod:

( kondisyon ) statement [ iba pang pahayag ] habang ( kondisyon ) statement gawin pahayag habang ( kondisyon ) para sa ( expr1 ; expr2 ; expr3 ) pahayag para sa ( var sa array ) pahayag break magpatuloy tanggalin array [ index ] mga pahayag }

Mga Pahayag ng I / O

Ang mga pahayag ng input / output ay ang mga sumusunod:

malapit ( file [ , paano ] )

Isara ang file, pipe o co-process. Ang opsyonal kung paano dapat gamitin lamang kapag isinasara ang isang dulo ng isang dalawang-way pipe sa isang co-proseso. Ito ay dapat na isang halaga ng string, alinman sa "sa" o "mula sa" .

getline

Itakda ang $ 0 mula sa susunod na rekord ng input; itakda ang NF , NR , FNR .

getline < file

Itakda ang $ 0 mula sa susunod na rekord ng file ; itakda ang NF .

getline var

Magtakda ng var mula sa susunod na rekord ng pag-input; itakda ang NR , FNR .

getline var < file

Magtakda ng var mula sa susunod na rekord ng file .

utos | getline [ var ]

Patakbuhin ang command piping ang output alinman sa $ 0 o var , tulad ng nasa itaas.

command | & getline [ var ]

Patakbuhin ang utos bilang isang co-proseso na piping ang output alinman sa $ 0 o var , tulad ng nasa itaas. Ang mga co-process ay extension ng gawk .

susunod

Itigil ang pagproseso ng kasalukuyang rekord ng pag-input. Ang susunod na rekord ng pag-input ay binabasa at ang pagproseso ay nagsisimula sa unang pattern sa programa ng AWK. Kung ang dulo ng data ng input ay naabot, ang END block (s), kung mayroon man, ay papatayin.

nextfile

Itigil ang pagproseso ng kasalukuyang input file. Ang susunod na rekord sa pag-record ng input ay mula sa susunod na input file. Ang FILENAME at ARGIND ay na-update, ang FNR ay na-reset sa 1, at ang pagproseso ay nagsisimula sa unang pattern sa programa ng AWK. Kung ang dulo ng data ng input ay naabot, ang END block (s), kung mayroon man, ay papatayin.

print

Ini-print ang kasalukuyang rekord. Ang record ng output ay tinapos na may halaga ng ORS variable.

print- expr-list

Mga expression ng pag-print. Ang bawat pagpapahayag ay pinaghihiwalay ng halaga ng variable ng OFS . Ang record ng output ay tinapos na may halaga ng ORS variable.

print expr-list > file

Mga expression ng pag-print sa file . Ang bawat pagpapahayag ay pinaghihiwalay ng halaga ng variable ng OFS . Ang record ng output ay tinapos na may halaga ng ORS variable.

printf fmt, expr-list

Format at i-print.

printf fmt, expr-list > file

Format at i-print sa file .

sistema ( cmd-line )

Ipatupad ang command cmd-line , at ibalik ang katayuan ng exit. (Maaaring hindi ito available sa mga sistemang hindi POSIX.)

fflush ( [ file ] )

I-flush ang anumang mga buffer na nauugnay sa bukas na output file o pipe file . Kung ang file ay nawawala, pagkatapos ay ang karaniwang output ay flushed. Kung ang file ay ang null string, pagkatapos ay ang lahat ng mga bukas na output file at pipa ay may mga buffers flushed.

Ang mga karagdagang redirections output ay pinapayagan para sa print at printf .

print ... >> file

Nagdadagdag ng output sa file .

print ... | utos

nagsusulat sa isang tubo.

print ... | & command

nagpapadala ng data sa isang co-proseso.

Ang getline command ay nagbabalik ng 0 sa dulo ng file at -1 sa isang error. Sa isang error, ERRNO ay naglalaman ng isang string na naglalarawan ng problema.

TANDAAN: Kung gumagamit ng isang pipe o co-proseso upang makakuha ng getline , o mula sa print o printf sa isang loop, dapat mong gamitin ang malapit () upang lumikha ng mga bagong pagkakataon ng command. Ang AWK ay hindi awtomatikong magsasara ng mga tubo o co-proseso kapag bumalik sila sa EOF.

Ang Pahayag ng printf

Ang mga bersyon ng AWK ng printf statement at sprintf () function (tingnan sa ibaba) tanggapin ang sumusunod na mga format ng pagtutukoy ng conversion:

% c

Isang ASCII na character. Kung ang argument na ginamit para sa % c ay numeric, ito ay ginagamot bilang isang character at naka-print. Kung hindi, ang argumento ay ipinapalagay na isang string, at ang tanging unang karakter ng string na iyon ay naka-print.

% d , % i

Isang decimal na numero (ang bahagi ng integer).

% e,% E

Isang floating point number ng form [-] d.dddddde [+ -] dd . Ang format ng E ay gumagamit ng E sa halip na e .

% f

Isang floating point number ng form [-] ddd.dddddd .

% g,% G

Gamitin ang % e o % f conversion, alinman ang mas maikli, na may mga hindi mahalaga na zero na pinigilan. Ang % G format ay gumagamit ng % E sa halip ng % e .

% o

Isang unsigned number octal (din isang integer).

% u Isang unsigned decimal na numero (muli, isang integer).

% s

Isang character na string.

% x,% X

Isang unsigned hexadecimal number (isang integer). Ang format ng % X ay gumagamit ng ABCDEF sa halip na abcdef .

%%

Isang solong % na karakter; walang argument na na-convert.

Opsyonal, ang mga karagdagang parameter ay maaaring nasa pagitan ng % at ang control letter:

bilangin $

Gamitin ang argumento ng count 'sa puntong ito sa pag-format. Ito ay tinatawag na positional specifier at inilalayon lalo na para gamitin sa mga isinalin na bersyon ng mga string ng format, hindi sa orihinal na teksto ng isang programa ng AWK. Ito ay extension ng gawk .

-

Ang pananalita ay dapat na pakaliwa-nabibigyang-katwiran sa loob ng larangan nito.

space

Para sa mga numerong conversion, prefix positive values ​​na may espasyo, at negatibong mga halaga na may minus sign.

+

Ang plus sign, na ginamit bago ang lapad ng modifier (tingnan sa ibaba), ay nagsasabing laging nag-aalok ng isang senyas para sa mga numerong conversion, kahit na ang data na naka-format ay positibo. Ang + ay binabawasan ang modifier ng espasyo.

#

Gumamit ng isang `` alternatibong form '' para sa ilang mga titik na kontrol. Para sa % o , magbigay ng isang nangungunang zero. Para sa % x , at % X , magbigay ng isang nangungunang 0x o 0X para sa isang resulta ng nonzero. Para sa % e , % E , at % f , ang resulta ay laging naglalaman ng decimal point. Para sa % g , at % G , ang mga sumusunod na zero ay hindi tinanggal mula sa resulta.

0

Ang isang nangungunang 0 (zero) ay nagsisilbing isang bandila, na nagpapahiwatig ng output ay dapat na may palaman na may zeroes sa halip na mga puwang. Nalalapat ito kahit na sa mga di-numerong mga format ng output. Ang bandang ito ay may epekto lamang kung ang lapad ng lapad ay mas malawak kaysa sa halaga na ipi-print.

lapad

Ang patlang ay dapat na may palaman sa lapad na ito. Ang patlang ay karaniwang may palaman na may mga puwang. Kung ang 0 bandila ay ginamit, ito ay may palaman na may zeroes.

. prec

Ang isang numero na tumutukoy sa katumpakan na gagamitin kapag nagpi-print. Para sa % e , % E , at % f format, tinutukoy nito ang bilang ng mga digit na nais mong ipalimbag sa kanan ng decimal point. Para sa % g , at % G format, tinutukoy nito ang maximum na bilang ng mga makabuluhang digit. Para sa % d , % o , % i , % u , % x , at % X na mga format, tinutukoy nito ang minimum na bilang ng mga digit upang i-print. Para sa % s , tinutukoy nito ang maximum na bilang ng mga character mula sa string na dapat na ipi-print.

Ang mga dynamic na lapad at prec kakayahan ng ANSI C printf () na gawain ay sinusuportahan. Ang isang * sa lugar ng alinman sa lapad o prec pagtutukoy nagiging sanhi ng kanilang mga halaga na kinuha mula sa listahan ng argumento sa printf o sprintf () . Upang gumamit ng positional specifier na may isang dynamic na lapad o katumpakan, ibigay ang count $ pagkatapos ng * sa format na string. Halimbawa, "% 3 $ * 2 $. * 1 $ s" .

Mga Espesyal na Pangalan ng File

Kapag ginagawa ang pag-redirect ko / O mula sa alinman sa print o printf sa isang file, o sa pamamagitan ng getline mula sa isang file, gawk kinikilala ang ilang mga espesyal na filename sa loob. Pinahihintulutan ng mga filename na ito ang pag-access upang mabuksan ang mga descriptor ng file na minana mula sa proseso ng magulang ng gawk (karaniwang ang shell). Ang mga pangalan ng file na ito ay maaari ding gamitin sa command line upang mag-pangalan ng mga file ng data. Ang mga filename ay:

/ dev / stdin

Ang karaniwang input.

/ dev / stdout

Ang karaniwang output.

/ dev / stderr

Ang karaniwang output ng error.

/ dev / fd / n

Ang file na nauugnay sa open file descriptor n .

Ang mga ito ay partikular na kapaki-pakinabang para sa mga mensahe ng error. Halimbawa:

i-print ang "Ikaw blew ito!" > "/ dev / stderr"

samantalang gusto mo munang gamitin

i-print ang "Ikaw blew ito!" | "cat 1> & 2"

Ang mga sumusunod na mga espesyal na filenames ay maaaring gamitin sa operator ng & co-process para sa paglikha ng mga koneksyon sa network ng TCP / IP.

/ inet / tcp / lport / rhost / rport

File para sa TCP / IP na koneksyon sa lokal na port lport sa remote host rhost sa remote port rport . Gumamit ng isang port ng 0 upang magkaroon ng system ang pumili ng isang port.

/ inet / udp / lport / rhost / rport

Katulad, ngunit gamitin ang UDP / IP sa halip ng TCP / IP.

/ inet / raw / lport / rhost / rport

Nakalaan para sa paggamit sa hinaharap.

Ang iba pang mga espesyal na filenya ay nagbibigay ng access sa impormasyon tungkol sa pagpapatakbo ng gawk na proseso. Ang mga filename na ito ay hindi na ginagamit. Gamitin ang array ng PROCINFO upang makuha ang impormasyong ibinibigay nila. Ang mga filename ay:

/ dev / pid

Ang pagbasa ng file na ito ay nagbabalik sa proseso ng ID ng kasalukuyang proseso, sa decimal, tinapos na may isang bagong linya.

/ dev / ppid

Ang pagbabasa ng file na ito ay nagbabalik sa parent process ID ng kasalukuyang proseso, sa decimal, tinapos na may isang newline.

/ dev / pgrpid

Ang pagbabasa ng file na ito ay nagbabalik sa proseso ng ID ng pangkat ng kasalukuyang proseso, sa decimal, tinapos na may isang bagong linya.

/ dev / user

Ang pagbabasa ng file na ito ay nagbabalik ng isang solong talaan na tinapos na may isang bagong linya. Ang mga patlang ay pinaghihiwalay ng mga puwang. Ang $ 1 ay ang halaga ng getuid (2) system call, $ 2 ang halaga ng geteuid (2) system call, $ 3 ay ang halaga ng getgid (2) system call, at $ 4 ang halaga ng getegid (2) sistema ng tawag. Kung mayroong anumang karagdagang mga patlang, sila ang mga ID ng grupo na ibinalik ng getgroups (2). Maramihang mga grupo ay maaaring hindi suportado sa lahat ng mga sistema.

Mga Numerikong Pag-andar

Ang AWK ay may mga sumusunod na built-in na mga function sa aritmetika:

atan2 ( y , x )

Ibinabalik ang arctangent ng y / x sa radians.

cos ( expr )

Ibinabalik ang cosine ng expr , na nasa radians.

exp ( expr )

Ang pag-exponential function.

int ( expr )

Truncates sa integer.

log ( expr )

Ang likas na pag-andar ng logarithm.

rand ()

Nagbabalik ng isang random na numero sa pagitan ng 0 at 1.

kasalanan ( expr )

Ibinabalik ang sine ng expr , na nasa radians.

sqrt ( expr )

Ang function na square root.

srand ( [ expr ] )

Gumagamit ng expr bilang isang bagong binhi para sa random na numero ng generator. Kung walang ibinigay na expr , ang oras ng araw ay ginagamit. Ang halaga ng pagbabalik ay ang nakaraang binhi para sa random na numero ng generator.

Mga Pag-andar ng String

Ang Gawk ay may mga sumusunod na built-in na mga function ng string:

asort ( s [ , d ] )

Ibinabalik ang bilang ng mga elemento sa source array s . Ang mga nilalaman ng s ay pinagsunod-sunod gamit ang normal na mga panuntunan ng gawk para sa paghahambing ng mga halaga, at ang mga index ng mga pinagsunod na halaga ng s ay pinalitan ng mga sequential integers na nagsisimula sa 1. Kung ang opsyonal na destination array d ay tinukoy, pagkatapos ay unang na-duplicate sa d , at pagkatapos ay d ay pinagsunod-sunod, iniiwan ang mga index ng source array s hindi nabago.

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

Hanapin ang target na string t para sa mga tugma ng regular na expression r . Kung ang h ay isang string na nagsisimula sa g o G , pagkatapos ay palitan ang lahat ng mga tugma ng r sa s . Kung hindi, h ay isang numero na nagpapahiwatig kung aling pagtutugma ng r upang palitan. Kung hindi ibinibigay ang t , ang $ 0 ay ginagamit sa halip. Sa loob ng kapalit na text s , ang pagkakasunud-sunod \ n , kung saan n ay isang digit mula 1 hanggang 9, maaaring gamitin upang ipahiwatig lamang ang teksto na tumutugma sa n 'parenthesized subexpression. Ang pagkakasunod-sunod \ 0 ay kumakatawan sa buong naitugmang teksto, tulad ng ginagawa ng character & . Hindi tulad ng sub () at gsub () , binago ang binagong string bilang resulta ng function, at ang orihinal na target na string ay hindi binago.

gsub ( r , s [ , t ] )

Para sa bawat substring na tumutugma sa regular na expression r sa string t , palitan ang string s , at ibalik ang bilang ng mga pamalit. Kung hindi ibinibigay ang t , gamitin ang $ 0 . Ang isang & sa kapalit na teksto ay pinalitan ng teksto na talagang naitugmang. Gamitin \ & upang makakuha ng literal na & . (Ito ay dapat na nai-type bilang "\\ &" ; tingnan ang GAWK: Epektibong AWK Programming para sa isang mas buong talakayan ng mga patakaran para sa & ng mga backslashes sa kapalit na teksto ng sub () , gsub () , at gensub () .)

index ( s , t )

Ibinabalik ang index ng string t sa string s , o 0 kung t ay wala. (Ipinapahiwatig nito na nagsisimula ang mga indeks ng character.)

haba ( [ s ] )

Ibinabalik ang haba ng string s , o ang haba ng $ 0 kung hindi ibinibigay.

tugma ( s , r [ , a ] )

Ibinabalik ang posisyon sa kung saan ang regular na expression ay nangyayari, o 0 kung wala r , at itinatakda ang mga halaga ng RSTART at RLENGTH . Tandaan na ang order ng argumento ay kapareho ng para sa ~ operator: str ~ re . Kung ang array ay ibinigay, a ay malinis at pagkatapos ay ang mga elemento 1 hanggang n ay puno ng mga bahagi ng s na tumutugma sa nararapat na parenthesized subexpression sa r . Ang 0'th elemento ng isang ay naglalaman ng bahagi ng s katugma ng buong regular na expression r .

split ( s , a [ , r ] )

Hatiin ang string s sa array a sa regular na expression r , at ibabalik ang bilang ng mga patlang. Kung ang r ay tinanggal, ang FS ay ginagamit sa halip. Ang hanay ng isang ay na-clear muna. Ang paghihiwalay ay magkatulad na magkahiwalay sa larangan, na inilarawan sa itaas.

sprintf ( fmt , expr-list )

Nag-print ng listahan ng expr ayon sa fmt , at binabalik ang resultang string.

strtonum ( str )

Sinusuri ang str , at ibabalik ang numerong halaga nito. Kung ang str ay nagsisimula sa isang nangungunang 0 , ipinapalagay ng strtonum () na ang str ay isang numero ng oktal . Kung ang str ay nagsisimula sa isang nangungunang 0x o 0X , ipinapalagay ng strtonum () na ang str ay isang hexadecimal na numero.

sub ( r , s [ , t ] )

Katulad ng gsub () , ngunit lamang ang unang pagtutugma ng substring ay pinalitan.

substr ( s , i [ , n ] )

Ibinabalik ang pinaka-substring ng n -character ng s simula sa i . Kung n ay tinanggal, ang natitirang bahagi ng s ay ginagamit.

tolower ( str )

Ibinabalik ang isang kopya ng string str , kasama ang lahat ng mga upper-case character sa str na isinalin sa kanilang katumbas na mga katapat na lower case. Ang mga di-alpabetikong karakter ay naiwang hindi nabago.

toupper ( str )

Ibinabalik ang isang kopya ng string str , kasama ang lahat ng mga lower-case character sa str na isinalin sa kanilang katumbas na mga katuwang na kaso. Ang mga di-alpabetikong karakter ay naiwang hindi nabago.

Mga Function ng Oras

Dahil ang isa sa mga pangunahing gamit ng mga programa ng AWK ay ang pagproseso ng mga log file na naglalaman ng impormasyon ng oras ng stamp, ang gawk ay nagbibigay ng mga sumusunod na function para sa pagkuha ng mga oras ng mga selyo at pag-format sa mga ito.

mktime ( datespec )

Inilalagay ang mga datepec sa isang stamp ng oras ng parehong form na ibinalik ng systime () . Ang mga datepec ay isang string ng form na YYYY MM DD HH MM SS [DST] . Ang mga nilalaman ng string ay may anim o pitong numero na kumakatawan sa buong taon kabilang ang siglo, ang buwan mula 1 hanggang 12, ang araw ng buwan mula 1 hanggang 31, ang oras ng araw mula 0 hanggang 23, ang minuto mula 0 hanggang 59, at ang pangalawa mula sa 0 hanggang 60, at isang opsyonal na pag-save ng flag ng araw. Ang mga halaga ng mga numerong ito ay hindi kailangang nasa loob ng hanay na tinukoy; halimbawa, isang oras ng -1 ay nangangahulugang 1 oras bago ang hatinggabi. Ang kalendaryong pinagmulan-zero Gregorian ay ipinapalagay, sa taon 0 na sinusundan taon 1 at taon -1 na sinusundan taon 0. Ang oras ay ipinapalagay na nasa lokal na timezone. Kung ang daylight saving flag ay positibo, ang oras ay ipinapalagay na maging daylight saving time; kung zero, ang oras ay ipinapalagay na karaniwang oras; at kung negatibo (ang default), ang mktime () ay nagtatangkang matukoy kung ang daylight saving time ay may bisa para sa tinukoy na oras. Kung ang mga datepec ay hindi naglalaman ng sapat na mga elemento o kung ang nagresultang oras ay wala sa hanay, ang mktime () ay nagbabalik -1.

strftime ( [ format [ , timestamp ]] )

Mga format ng timestamp ayon sa detalye sa format. Ang timestamp ay dapat na sa parehong form na ibinalik sa pamamagitan ng systime () . Kung nawawala ang timestamp , ang kasalukuyang oras ng araw ay ginagamit. Kung nawawala ang format , ang isang default na format na katumbas ng output ng petsa (1) ay ginagamit. Tingnan ang detalye para sa strftime () function sa ANSI C para sa mga conversion na format na garantisadong magagamit. Ang isang pampublikong-domain na bersyon ng strftime (3) at isang pahina ng tao para dito ay may gawk ; kung ang bersyon na iyon ay ginamit upang bumuo ng gawk , pagkatapos ay ang lahat ng mga conversion na inilarawan sa pahina ng tao ay magagamit upang gawk.

systime ()

Ibinabalik ang kasalukuyang oras ng araw bilang bilang ng mga segundo mula noong Epoch (1970-01-01 00:00:00 UTC sa mga sistemang POSIX).

Pag-andar ng Mga Manipulasyon ng Bit

Simula sa bersyon 3.1 ng gawk , ang mga sumusunod na bit manipulation function ay magagamit. Gumagana ang mga ito sa pamamagitan ng pag-convert ng double-precision floating point values ​​sa unsigned long integers, paggawa ng operasyon, at pagkatapos ay i-convert ang resulta pabalik sa lumulutang na tuldok. Ang mga function ay:

at ( v1 , v2 )

Ibalik ang bitwise AT ng mga halagang ibinigay ng v1 at v2 .

compl ( val )

Ibalik ang bitwise na pandagdag ng val .

lshift ( val , count )

Ibalik ang halaga ng val , lumipat sa kaliwa sa pamamagitan ng mga bits ng count .

o ( v1 , v2 )

Ibalik ang bitwise O ng mga halaga na ibinigay ng v1 at v2 .

rshift ( val , count )

Ibalik ang halaga ng val , lumipat sa kanan sa pamamagitan ng mga bits ng count .

xor ( v1 , v2 )

Ibalik ang bitwise XOR ng mga halaga na ibinigay ng v1 at v2 .

Internasyonal na Pag-andar

Simula sa bersyon 3.1 ng gawk , ang mga sumusunod na function ay maaaring gamitin mula sa loob ng iyong AWK program para sa pagsasalin ng mga string sa run-time. Para sa mga kumpletong detalye, tingnan ang GAWK: Epektibong AWK Programming .

bindtextdomain ( direktoryo [ , domain ] )

Tinutukoy ang direktoryo kung saan hinahanap ng gawk ang mga .mo file, kung sakaling hindi o hindi maaaring mailagay sa mga lokasyon ng `` standard '(hal., Sa panahon ng pagsubok). Binabalik nito ang direktoryo kung saan ang domain ay `` nakatali. ''

Ang default na domain ay ang halaga ng TEXTDOMAIN . Kung ang direktoryo ay ang null string ( "" ), pagkatapos bindtextdomain () ay magbabalik ng kasalukuyang umiiral para sa ibinigay na domain .

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

Ibinabalik ang pagsasalin ng string sa domain ng domain ng domain para sa kategoryang kategorya ng lokal. Ang default na halaga para sa domain ay ang kasalukuyang halaga ng TEXTDOMAIN . Ang default na halaga para sa kategorya ay "LC_MESSAGES" .

Kung nagtustos ka ng isang halaga para sa kategorya , dapat itong isang string na katumbas ng isa sa mga kilalang kategorya ng locale na inilarawan sa GAWK: Epektibong AWK Programming . Kailangan mo ring magbigay ng isang domain na domain. Gumamit ng TEXTDOMAIN kung nais mong gamitin ang kasalukuyang domain.

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

Ibinabalik ang pangmaramihang anyo na ginamit para sa bilang ng pagsasalin ng string1 at string2 sa domain ng domain ng domain para sa kategoryang kategorya ng locale. Ang default na halaga para sa domain ay ang kasalukuyang halaga ng TEXTDOMAIN . Ang default na halaga para sa kategorya ay "LC_MESSAGES" .

Kung nagtustos ka ng isang halaga para sa kategorya , dapat itong isang string na katumbas ng isa sa mga kilalang kategorya ng locale na inilarawan sa GAWK: Epektibong AWK Programming . Kailangan mo ring magbigay ng isang domain na domain. Gumamit ng TEXTDOMAIN kung nais mong gamitin ang kasalukuyang domain.

MGA TINANGGAP NG MGA GUMAGAMIT NG MGA USER

Ang mga pag-andar sa AWK ay tinukoy bilang mga sumusunod:

pangalan ng function ( listahan ng parameter ) (mga pahayag )

Ang mga pag-andar ay pinaandar kapag tinawag sila mula sa loob ng mga expression sa alinman sa mga pattern o mga pagkilos. Ang mga aktwal na parameter na ibinibigay sa function na tawag ay ginagamit upang magbigay ng halimbawa ang mga pormal na parameter na ipinahayag sa function. Ang mga array ay pinapasa ng reference, ang iba pang mga variable ay ipinasa ng halaga.

Dahil ang mga pag-andar ay hindi orihinal na bahagi ng wika ng AWK, ang pagkakaloob para sa mga lokal na variable ay sa halip ay clumsy: Ang mga ito ay ipinahayag bilang dagdag na parameter sa listahan ng parameter. Ang kombensyon ay upang paghiwalayin ang mga lokal na variable mula sa mga tunay na parameter sa pamamagitan ng mga sobrang puwang sa listahan ng parameter. Halimbawa:

function f (p, q, a, b) # a at b ay local {...} / abc / {...; f (1, 2); ...}

Ang kaliwang panaklong sa isang function na tawag ay kinakailangan upang agad na sundin ang pangalan ng function, nang walang anumang intervening puting espasyo. Ito ay upang maiwasan ang isang sintaktik na kalabuan sa operator ng pagdudugtong. Ang paghihigpit na ito ay hindi nalalapat sa mga built-in na function na nakalista sa itaas.

Ang mga function ay maaaring tumawag sa bawat isa at maaaring recursive. Ang mga parameter ng function na ginamit bilang mga lokal na variable ay sinimulan sa null string at ang numero zero sa function na invocation.

Gamitin ang return expr upang bumalik ang isang halaga mula sa isang function. Ang halaga ng pagbalik ay hindi natukoy kung walang ibinigay na halaga, o kung ang function ay nagbabalik sa pamamagitan ng `` lagpasan '' sa dulo.

Kung - ibinigay ang lint , binabalaan ng gawk ang mga tawag sa mga hindi natukoy na pag-andar sa oras ng pag-parse, sa halip na sa run time. Ang pagtawag sa isang di-natukoy na function sa run time ay isang nakamamatay na error.

Maaaring gamitin ang salitang func sa halip na function .

DINNAMICALLY LOADING NEW FUNCTIONS

Simula sa bersyon 3.1 ng gawk , maaari mong mag-dynamic na magdagdag ng mga bagong built-in na function sa running gawk interpreter. Ang buong mga detalye ay lampas sa saklaw ng manu-manong pahina na ito; tingnan ang GAWK: Ang mabisang AWK Programming para sa mga detalye.

extension ( object , function )

I-dynamically i-link ang nakabahaging object file na pinangalanan ng object , at tumawag sa function sa bagay na iyon, upang magsagawa ng initialization. Ang mga ito ay dapat na parehong ipagkakaloob bilang mga string. Ibinabalik ang halaga na ibinalik sa pamamagitan ng pag- andar .

Ang function na ito ay ibinigay at dokumentado sa GAWK: Epektibong AWK Programming , ngunit ang lahat ng tungkol sa tampok na ito ay malamang na baguhin sa susunod na release. Lubos naming inirerekumenda na hindi mo ginagamit ang tampok na ito para sa anumang bagay na hindi mo nais na gawing muli.

MGA SIGNALS

tumatanggap ang pgawk ng dalawang signal. Pinapayagan ito ng SIGUSR1 na magtapon ng isang profile at tumawag sa stack ng tawag sa file ng profile, na alinman sa awkprof.out , o anumang file na pinangalanan sa --profile na opsyon. Pagkatapos ay patuloy itong tumakbo. Ang SIGHUP ay nagdudulot nito upang itapon ang profile at tumawag sa stack ng tawag at pagkatapos ay lumabas.

MGA HALIMBAWA

I-print at i-sort ang mga pangalan ng pag-login ng lahat ng mga user: BEGIN {FS = ":"} {print $ 1 | "i-sort"} Bilangin ang mga linya sa isang file: {nlines ++} END {print nlines} Susundan ang bawat linya ayon sa numero nito sa file: {print FNR, $ 0} Concatenate and line number (isang variation sa isang tema) $ 0}

Internalization

Ang mga string constant ay mga pagkakasunud-sunod ng mga character na nakapaloob sa double quotes. Sa mga di-Ingles na kapaligiran sa pagsasalita, posible na markahan ang mga string sa programa ng AWK na nangangailangan ng pagsasalin sa katutubong likas na wika. Ang mga ganitong mga string ay minarkahan sa AWK na programa na may isang nangungunang salungguhit (`` _ ''). Halimbawa,

gawk 'BEGIN {print "halo, mundo"}'

laging naka-print hello, mundo . Ngunit,

gawk 'BEGIN {print _ "kumusta, mundo"}'

maaaring mag-print ng bonjour, monde sa France.

Mayroong ilang mga hakbang na kasangkot sa paggawa at pagpapatakbo ng isang localizable AWK na programa.

1.

Magdagdag ng isang BEGIN pagkilos upang magtalaga ng isang halaga sa variable na TEXTDOMAIN upang maitakda ang domain ng teksto sa isang pangalan na nauugnay sa iyong programa.


BEGIN {TEXTDOMAIN = "myprog"}

Pinapayagan nito ang gawk upang mahanap ang .mo na file na nauugnay sa iyong programa. Kung wala ang hakbang na ito, ginagamit ng gawk ang mga domain ng teksto ng mensahe , na malamang ay hindi naglalaman ng mga pagsasalin para sa iyong programa.

2.

Markahan ang lahat ng mga string na dapat isalin sa nangungunang mga underscore.

3.

Kung kinakailangan, gamitin ang dcgettext () at / o bindtextdomain () function sa iyong programa, kung naaangkop.

4.

Patakbuhin ang gawk --gen-po -f myprog.awk> myprog.po upang makabuo ng isang .po file para sa iyong programa.

5.

Magbigay ng mga naaangkop na pagsasalin, at bumuo at mag-install ng kaukulang .mo file.

Ang mga internasyonal na tampok ay inilarawan sa buong detalye sa GAWK: Epektibong AWK Programming .

Kakayahan sa Posix

Ang pangunahing layunin para sa gawk ay ang pagiging tugma sa pamantayan ng POSIX, pati na rin ang pinakabagong bersyon ng UNIX awk . Para sa layuning ito, isinasama ng gawk ang sumusunod na mga tampok na nakikita ng gumagamit na hindi inilarawan sa aklat ng AWK, ngunit bahagi ng bersyon ng Bell Laboratories ng awk , at nasa pamantayan ng POSIX.

Ang aklat ay nagpapahiwatig na ang assignment ng variable ng command line ay nangyayari kapag bukas naman ang argumento bilang isang file, na pagkatapos ay pagkatapos na maisakatuparan ang block na BEGIN . Gayunpaman, sa mga naunang pagpapatupad, kapag ang naturang assignment ay lumitaw bago ang anumang mga pangalan ng file, ang pagtatalaga ay mangyayari bago tumakbo ang block na BEGIN . Ang mga application ay dumating sa depende sa `` tampok na ito. '' Kapag awk ay binago upang tumugma sa dokumentasyon nito, ang -v na pagpipilian para sa pagtatalaga ng mga variable bago ang pagpapatupad ng programa ay idinagdag upang mapaunlakan ang mga application na nakasalalay sa lumang pag-uugali. (Ang tampok na ito ay napagkasunduan ng parehong mga Laboratories ng Bell at ng mga nag-develop ng GNU.)

Ang -W na pagpipilian para sa pagpapatupad ng mga tiyak na tampok ay mula sa pamantayan ng POSIX.

Kapag nagpoproseso ng mga argumento, ginagamit ng gawk ang espesyal na opsyon na `` - '' upang maipahiwatig ang dulo ng mga argumento. Sa mode ng pagiging tugma, binabalaan ito ngunit sa kabilang banda ay binabalewala ang mga di-natukoy na mga opsyon. Sa normal na operasyon, ang mga naturang argumento ay ipinapasa sa programa ng AWK para iproseso ito.

Ang AWK book ay hindi tumutukoy sa return value ng srand () . Ang POSIX standard ay binabalik nito ang binhing ginagamit nito, upang pahintulutan ang pagsubaybay ng random na mga sequence ng numero. Kaya ang srand () sa gawk ay nagbabalik din sa kasalukuyang binhi nito.

Ang iba pang mga bagong tampok ay: Ang paggamit ng mga multiple -f na mga pagpipilian (mula sa MKS awk ); ang ENVIRON array; ang \ a , at \ v escape pagkakasunud-sunod (tapos na orihinal sa gawk at fed pabalik sa bersyon ng Bell Laboratories); ang tolower () at toupper () built-in na mga function (mula sa bersyon ng Bell Laboratories); at ang ANSI C na mga pagtutukoy ng conversion sa printf (tapos muna sa bersyon ng Bell Laboratories).

Makasaysayang Mga Tampok

Mayroong dalawang mga tampok ng makasaysayang mga pagpapatupad ng AWK na sumusuporta sa gawk . Una, posible na tawagan ang haba () na built-in na function hindi lamang sa walang argumento, ngunit kahit na walang panaklong! Kaya,

a = length # Holy Algol 60, Batman!

ay pareho sa alinman sa

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

Ang tampok na ito ay minarkahan bilang `` deprecated '' sa POSIX standard, at gawk ay nagbabala ng isang babala tungkol sa paggamit nito kung - tinukoy ang lint sa command line.

Ang iba pang mga tampok ay ang paggamit ng alinman sa magpatuloy o pahinga pahayag sa labas ng katawan ng isang habang , para sa , o gawin loop. Ginawa ng mga tradisyunal na implementasyon ng AWK ang paggamit na katumbas sa susunod na pahayag. Sinusuportahan ng Gawk ang paggamit na ito kung tinukoy ang - batayan .

Mga Extension ng GNU

Mayroong maraming mga extension ang Gawk sa POSIX awk . Inilarawan ang mga ito sa seksyong ito. Maaaring hindi paganahin ang lahat ng mga extension na inilarawan dito sa pamamagitan ng invoking gawk gamit ang - opsyonal na opsyon.

Ang mga sumusunod na tampok ng gawk ay hindi magagamit sa POSIX awk .

*

Walang paghahanap sa landas ang gumanap para sa mga file na pinangalanang sa pamamagitan ng -f na opsiyon. Samakatuwid ang AWKPATH kapaligiran variable ay hindi espesyal.

*

Ang \ x escape sequence. ( Pansamantalang may --posix .)

*

Ang fflush () function. ( Pansamantalang may --posix .)

*

Ang kakayahan upang magpatuloy ng mga linya pagkatapos ? at :. ( Pansamantalang may --posix .)

*

Octal at hexadecimal constants sa AWK programs.

*

Ang mga ARGIND , BINMODE , ERRNO , LINT , RT at TEXTDOMAIN variable ay hindi espesyal.

*

Ang variable na IGNORECASE at ang mga epekto nito ay hindi magagamit.

*

Ang FIELDWIDTHS variable at fixed-width field splitting.

*

Ang array ng PROCINFO ay hindi magagamit.

*

Ang paggamit ng RS bilang isang regular na expression.

*

Ang mga espesyal na pangalan ng file na magagamit para sa pag-redirect I / O ay hindi kinikilala.

*

Ang | & operator para sa paglikha ng mga co-proseso.

*

Ang kakayahang hatiin ang mga indibidwal na mga character gamit ang null string bilang ang halaga ng FS , at bilang pangatlong argumento sa split () .

*

Ang opsyonal na pangalawang argument sa malapit () function.

*

Ang opsyonal na ikatlong argumento sa tugma () function.

*

Ang kakayahang gamitin positional specifiers sa printf at sprintf () .

*

Ang paggamit ng delete array upang tanggalin ang buong nilalaman ng isang array.

*

Ang paggamit ng nextfile upang iwanan ang pagproseso ng kasalukuyang input file.

*

Ang (at ) , at () , rshift () , strftime () , strtonum () , systime () at xor () function.

*

Mga lokal na string.

*

Pagdaragdag ng mga bagong built-in na mga pag-andar nang buo sa extension () function.

Ang AWK book ay hindi tumutukoy sa halaga ng pagbabalik ng function na malapit () . Ang close na Gawk () ay nagbabalik ng halaga mula sa fclose (3), o pclose (3), kapag isinasara ang output file o pipe, ayon sa pagkakabanggit. Binabalik nito ang exit status ng proseso kapag tinatapos ang isang input pipe. Ang halaga ng pagbalik ay -1 kung ang pinangalang file, tubo o co-proseso ay hindi binuksan sa isang pag-redirect.

Kapag ang gawk ay may tawag sa - opsyon na batayan , kung ang fs argument sa -F ay isang `` t '', pagkatapos ay itatakda ang FS sa character na tab. Tandaan na ang pag-type ng gawk -F \ t ... ay nagdudulot lamang ng shell na i-quote ang `` t, '', at hindi pumasa `` \ t '' sa pagpipilian na -F . Dahil ito ay isang halip pangit espesyal na kaso, ito ay hindi ang default na pag-uugali. Ang pag-uugali na ito ay hindi rin magaganap kung ang --posix ay tinukoy. Upang makakuha ng isang tab na character bilang field separator, mas mainam na gumamit ng mga single quote: gawk -F '\ t' ....

Tingnan ang iba pang mga utos : maghintay , lp , kumpleto , execv , getfacl , ioctl , uniq , rmmod , pvcreate , rsh , unix2dos , cal , fs , cd , iwpriv , swapon , autofs , talk , motd , free , lpr , execl , fdisk , sa , sino , iwconfig , ifconfig , vgdisplay , bukas , lsmod , ntohs , mailq , pumatay , wtmp