AWK
Տեսակ | UNIX օգտակարություն, scripting language?, պրոցեդուրային ծրագրավորման և data-driven programming? |
---|---|
Առաջացել է | 1977 |
Ստեղծող | Ալֆրեդ Ահո, Բրայան Կերնիգան և Պիտեր Ուայնբերգեր |
Նախագծող | Ալֆրեդ Ահո և Բրայան Կերնիգան |
Համացանցի տվյալների տեսակ | text/x-awk[1] և application/x-awk[2] |
Ընթացիկ տարբերակ | IEEE Std 1003.1-2008 |
Ներշնչվել է | Սի (ծրագրավորման լեզու), SNOBOL? և Bourne shell? |
Անվանված է | Ալֆրեդ Ահո[3], Բրայան Կերնիգան[3] և Պիտեր Ուայնբերգեր[3] |
Ելակոդ | github.com/onetrueawk/awk |
AWK Վիքիպահեստում |
AWK, մեկնաբանվող սկրիպտային լեզու է՝ ըստ առաջադրված շաբլոնների մուտքային հոսքի (օրինակ, տեքստային ֆայլ) տողային հավաքման և մշակման համար։ Օգտագործվում է bash (sh) սկրիպտներում։ AWK անունը կազմվել է լեզվի ստեղծողների անվանական սկզբնատառերով՝ Ալֆրեդ Վ. Ահո, Փիթեր Ջ. Վեինբերգեր և Բրայեն Վ. Կերնինգհան։ AWK-ի առաջին տարբերակը գրվել է 1977 թ. AT & T Bell լաբորատորիայում։
Ծրագրի կառուցվածքը
[խմբագրել | խմբագրել կոդը]AWK-ն դիտարկում է մուտքային հոսքը որպես գրառումների ցուցակ։ Յուրանաքնչյուր գրառում բաժանվում է դաշտերի։ Այս ինֆորմացիայի հիման վրա կատարվում է ծրագրավորողի կողմից որոշակի մշակման ալգորիթմ։ Գրառումների բաժանումը լռելյայն համարվում է նոր տողի սիմվոլը, այսինքն գրառումները դրանք նույնն են ինչ-որ տողերը, դաշտերի բաժանարարները՝ բացատի կամ տաբուլյացիայի սիմվոլները՝ կամ այդպիսի սիմվոլների հաջրդականությունը։ Բաժանարար-սիմվոլները կարելի է ծրագրում հստակ որոշել։ Դաշտերի բաժանարար-սիմվոլները կարելի է գտնել հրամանների տողում։ AWK-ծրագիրը կազմված է օպերատորներից (կանոններից), որոնք ունեն այս տեսքը.
շաբլոն {գործողություն} շաբլոն {գործողություն} . . .
Ամեն գրառում հերթականությամբ համեմատվում է բոլոր շաբլոնների հետ, և ամեն անգամ երբ այն համապատասխանում է շաբլոնին, կատարվում է պահանջվող գործողությունը։ Եթե շաբլոնը նշված չէ, ապա գործողությունը կատարվում է ցանկացած գրառման համար։ Իսկ եթե նշված չէ գործողությունը, ապա արտածվում է գրառումը։ AWK ծրագրում գոյություն ունի նաև 2 նախանշված' BEGIN
և END
շաբլոնները։ BEGIN
շաբլոնը կատարվում է մուտքային հոսքի մշակումից առաջ։ END
-ը՝ մուտքային հոսքի վերջին գրառման մշակումից հետո։
Գործողությունը կարող է բաղկացած լինել օպերատորների հաջորդականություններից՝ բաժանված կետ-ստորակետով, տողի տեղափոխմամբ կամ փակող փակագծով։
Լեզվի կոնստուկցիա
[խմբագրել | խմբագրել կոդը]Պայմաննեը
[խմբագրել | խմբագրել կոդը]if (պաման)
then
{
Գործողությունների ցուցակ 1
}
else
{
Գործողությունների ցուցակ 2
}
Պարբերություններ
[խմբագրել | խմբագրել կոդը]do
[խմբագրել | խմբագրել կոդը]do{
պարբերության մարմինը
}while (պայման)
while
[խմբագրել | խմբագրել կոդը]while (պայման){
պարբերության մարմինը
}
for (ինդեքսային ձև)
[խմբագրել | խմբագրել կոդը]Պարբերություն for, ինդեքսային զանգվածների մշակմանն նպատակաուղղված ձև, ունի հետևյալ տեսքը.
for(նույնականացման սեկցիա, պայմանի սեկցիա, ինտերատորի թարմացման սեկցիա){
պարբերության մարմինը
}
for (ասոցիատիվ ձև)
[խմբագրել | խմբագրել կոդը]Պարբերություն for, ասոցիատիվ զանգվածների մշակմանն նպատակաուղղված ձև, ունի հետևյալ տեսքը.
for(ուղղորդիչ in զանգված){
պարբերության մարմինը
}
Կառուցվածքային փոփոխականներ
[խմբագրել | խմբագրել կոդը]փոփոխական | ներածություն | պայմանական նշանակությունը |
---|---|---|
ARGC | Հրամանի տողի փաստարկների քանակ | - |
ARGV | Հրամանի տողի փաստարկների զանգված | - |
ENVIRON | Փոփոխական շրջակայք պարունակող զանգված | - |
FILENAME | Մշակվող մուտքային ֆայլ | - |
FNR | Ընթացիկ ֆայլում գրառման համարը | - |
FS | Մուտքագրման մեջ գրառումների դաշտերի բաժանարար | բացատ(ներ) և/կամ տաբուլյացիա |
NF | Ընթացիկ գրառման դաշտերի քանակը | - |
NR | Գրառման համարը (հաշվարկված գրառումների ընդհանուր թիվը) | - |
OFMT | Թվերի տպման ֆորմատը | %.6g |
OFS | Ելքագրման մեջ գրառման դաշտերի բաժանարար (սիմվոլ) | բացատ(ներ) և/կամ տաբուլյացիա |
ORS | AWK-ծրագրի ելքագրման գրառումների բաժանարար (սիմվոլ) | \0 |
RS | ելքագրման գրառումների բաժանարար (սիմվոլ) | \0 |
RSTART | ||
RLENGTH | ||
SUBSEP |
Կառուցվածքային ֆունկցիաներ
[խմբագրել | խմբագրել կոդը]Օրինակներ
[խմբագրել | խմբագրել կոդը]«Hello world!»
BEGIN{print "Hello World!"; exit}
Ամենաերկար տողի երկարության տպում.
{ if (length($0) > max) max = length($0) } END { print max }
80 սիմվոլից ավելի երկարության բոլոր տողերի տպում.
{ if (length($0) > 80) print $0 }
Ոեկուզ և մեկ դաշտ ունեցող բոլոր տողերի տպում.
{ if (NF > 0) print $0 }
Ֆայլում տողերի քանակի տպումը.
END { print NR }
3-ին բազմապատիկ համարով տողերի տպումը.
{ if (FNR%3==0) print $0 }
Առաջին երեք դաշտերին հաջորդող մուտքային տողի մնացորդի տպում
{ # 4-րդ դաշտի որոնման սկիզբ... match($0,/[ \t]*[^ \t]*[ \t]*[^ \t]*[ \t]*[^ \t]*[ \t]*/) # ...գտնված դիրքով մուտքային տողի մնացորդի տպում print substr($0,1 RLENGTH) }
Ծանոթագրություններ
[խմբագրել | խմբագրել կոդը]Արտաքին հղումներ
[խմբագրել | խմբագրել կոդը]- Awk by example
- Gawk: Effective AWK Programming
- Gawk - Gnu Awk
- Gawk for Windows
- Awk, Nawk and GNU Awk Cheat Sheet
- awklang.org - Τhe site for things related to the awk language
- awk - The Open Group Base Specifications Issue 7, 2018 edition
- Awk: The Power and Promise of a 40-Year-Old Language
- The state of the AWK - LWN.net
|