AWK

Վիքիպեդիայից՝ ազատ հանրագիտարանից
AWK
Изображение логотипа
ՏեսակUNIX օգտակարություն, scripting language?, պրոցեդուրային ծրագրավորման և data-driven programming?
Առաջացել է1977
ՍտեղծողԱլֆրեդ Ահո, Բրայան Կերնիգան և Պիտեր Ուայնբերգեր
ՆախագծողԱլֆրեդ Ահո և Բրայան Կերնիգան
Համացանցի տվյալների տեսակtext/x-awk[1] և application/x-awk[2]
Ընթացիկ տարբերակIEEE Std 1003.1-2008
Ներշնչվել էC, 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)
}

Ծանոթագրություններ[խմբագրել | խմբագրել կոդը]

Արտաքին հղումներ[խմբագրել | խմբագրել կոդը]