AWK

**AWK**, մեկնաբանվող սկրիպտային լեզու է՝ ըստ առաջադրված շաբլոնների մուտքային հոսքի (օրինակ, տեքստային ֆայլ) տողային հավաքման և մշակման համար։ Օգտագործվում է bash (sh) սկրիպտներում։
AWK անունը կազմվել է լեզվի ստեղծողների անվանական սկզբնատառերով՝ Ալֆրեդ Վ. Ահո, Փիթեր Ջ. Վեինբերգեր և Բրայեն Վ. Կերնինգհան։ AWK-ի առաջին տարբերակը գրվել է 1977 թ. AT & T Bell լաբորատորիայում։

## Ծրագրի կառուցվածքը
AWK-ն դիտարկում է մուտքային հոսքը որպես գրառումների ցուցակ։ Յուրանաքնչյուր գրառում բաժանվում է դաշտերի։ Այս ինֆորմացիայի հիման վրա կատարվում է ծրագրավորողի կողմից որոշակի մշակման ալգորիթմ։ Գրառումների բաժանումը լռելյայն համարվում է նոր տողի սիմվոլը, այսինքն գրառումները դրանք նույնն են ինչ-որ տողերը, դաշտերի բաժանարարները՝ բացատի կամ տաբուլյացիայի սիմվոլները՝ կամ այդպիսի սիմվոլների հաջրդականությունը։ Բաժանարար-սիմվոլները կարելի է ծրագրում հստակ որոշել։ Դաշտերի բաժանարար-սիմվոլները կարելի է գտնել հրամանների տողում։
AWK-ծրագիրը կազմված է օպերատորներից (կանոններից), որոնք ունեն այս տեսքը.
 շաբլոն {գործողություն}
 շաբլոն {գործողություն}
 . . .
Ամեն գրառում հերթականությամբ համեմատվում է բոլոր շաբլոնների հետ, և ամեն անգամ երբ այն համապատասխանում է շաբլոնին, կատարվում է պահանջվող գործողությունը։ Եթե շաբլոնը նշված չէ, ապա գործողությունը կատարվում է ցանկացած գրառման համար։ Իսկ եթե նշված չէ գործողությունը, ապա արտածվում է գրառումը։ AWK ծրագրում գոյություն ունի նաև 2 նախանշված' `BEGIN` և `END` շաբլոնները։ `BEGIN` շաբլոնը կատարվում է մուտքային հոսքի մշակումից առաջ։ `END`-ը՝ մուտքային հոսքի վերջին գրառման մշակումից հետո։
Գործողությունը կարող է բաղկացած լինել օպերատորների հաջորդականություններից՝ բաժանված կետ-ստորակետով, տողի տեղափոխմամբ կամ փակող փակագծով։

## Լեզվի կոնստուկցիա
### Պայմաննեը

```bash
if (պաման)
then
 {
 Գործողությունների ցուցակ 1
 }
else
 {
 Գործողությունների ցուցակ 2
 }
```


### Պարբերություններ
#### do

```bash
do{
 պարբերության մարմինը
}while (պայման)
```


#### while

```bash
while (պայման){
 պարբերության մարմինը
}
```


#### for (ինդեքսային ձև)
Պարբերություն for, ինդեքսային զանգվածների մշակմանն նպատակաուղղված ձև, ունի հետևյալ տեսքը.

```bash
for(նույնականացման սեկցիա, պայմանի սեկցիա, ինտերատորի թարմացման սեկցիա){
 պարբերության մարմինը
}
```


#### for (ասոցիատիվ ձև)
Պարբերություն for, ասոցիատիվ զանգվածների մշակմանն նպատակաուղղված ձև, ունի հետևյալ տեսքը.

```bash
for(ուղղորդիչ in զանգված){
 պարբերության մարմինը
}
```


## Կառուցվածքային փոփոխականներ

## Կառուցվածքային ֆունկցիաներ
### Օրինակներ
«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