**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)
}
```

Ծանոթագրություններ
------------------

1. 1 2 3

Արտաքին հղումներ
----------------

* 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

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * դ
* ք
* խ
Հիմնական ծրագրավորման լեզուները (համեմատումը  • IDE  • պատմությունը  • ժամանակագրութունը) |
| --- |
|  |
| Օգտագործվողլեզուները | 
Ada •
APL •
Ասեմբլեր •
ActionScript •
ABAP/4 •
AutoIt •
AWK •
Basic •
C •
Կոբոլ •
C++ •
C# •
Cω •
Clarion •
Clojure •
ColdFusion •
Common Lisp •
D •
dBase •
Delphi •
Eiffel •
Erlang •
Euphoria •
F# •
Fort •
Fortran •
Gambas •
Go •
Groovy •
HAL/S •
Haskell •
Icon •
Ջավա •
ՋավաՍկրիպտ •
Limbo •
Lua •
Mudula-3 •
Object Pascal •
Objective-C •
OCaml •
Oz •
Parser •
Pascal •
Perl •
PHP •
PowerBASIC •
Python •
PL/1 •
Prolog •
R •
Ruby •
Scala •
Scheme •
Smalltalk •
SQL •
Standard ML •
PL/SQL •
Tcl •
Vala •
Visual Basic
(.NET)
 |
|  |
| Ուսումնական | 
Agda •
Clean •
Curry •
Logo •
ML •
REFAL •
Simula •
Oberon
 |
|  |
| IEC 61131-3 | 
Instruction List •
ST •
FBD •
Ladder Diagram (LD) •
SFC
 |
|  |
| Այլ | 
Modula-2 •
Miranda •
Hope •
Rexx
 |
|  |
| Էզոտերիկ | 
HQ9+/HQ9++ •
INTERCAL •
Brainfuck •
Brainfork •
Befunge •
Malbolge •
Piet •
Spoon •
Unlambda •
Whitespace •
FALSE •
LOLCODE
 |
|  |
| Վիզուալ | 
G
(LabVIEW) •
Microsoft VPL •
Sikuli •
VisSim •
Scratch
 |

 |