ÀÕÚÛÐÜÐ:

info.krc.karelia.ru

win -:|:- koi -:|:- iso -:|:- dos -:|:- mac

Start -:|:- ¿àÞÕÚâë -:|:- ¾ ÝÐá

awk
(ãçÕÑÝÞÕ ßÞáÞÑØÕ)


(á) °.ÁÞÛÞÒìÕÒ

´ÐÝÝÐï áâÐâìï ÑëÛÐ Ø×ÝÐçÐÛìÝÞ ÝÐßØáÐÝÐ ÔÛï
www.nevod.ru


Ϸ˺ ¾±À°±¾Âº¸ È°±»¾½¾² awk
(Aho, Weinberg, Kernigan)

awk - ÚÞÜÐÝÔÐ ÚÞÝâÕÚáâÝÞÓÞ ßÞØáÚÐ Ø ßàÕÞÑàÐ×ÞÒÐÝØï âÕÚáâÐ.
¾ÝÐ - äØÛìâà. µÕ ÜÞÖÝÞ àÐááÜÐâàØÒÐâì ÚÐÚ ÞÑÞÛÞçÚã "awk" Ò
ÞÑÞÛÞçÚÕ "shell".

1. ÁÂÀúÂÃÀ° awk-¿À¾³À°¼¼Ë

¿àÞÓàÐÜÜÐ áÞáâÞØâ Ø× ÞßÕàÐâÞàÞÒ (ßàÐÒØÛ), ØÜÕîéØå ÒØÔ:

èÐÑÛÞÝ {ÔÕÙáâÒØÕ}
èÐÑÛÞÝ {ÔÕÙáâÒØÕ}
. . .

ÇÐáâÝëÕ áÛãçÐØ:

{ÔÕÙáâÒØÕ} - ÚÞÓÔÐ ÔÕÙáâÒØÕ ÒëßÞÛÝïÕâáï ÔÛï ÒáÕå áâàÞÚ.
èÐÑÛÞÝ - ÚÞÓÔÐ ÒëÒÞÔïâáï áâàÞÚØ á ÔÐÝÝëÜ èÐÑÛÞÝÞÜ.


´ÕÙáâÒØÕ ÜÞÖÕâ áÞáâÞïâì Ø× ßÞáÛÕÔÞÒÐâÕÛìÝÞáâØ ÞßÕàÐâÞàÞÒ,
àÐ×ÔÕÛïÕÜÞÙ ";" ØÛØ ßÕàÕÒÞÔÞÜ áâàÞÚØ ØÛØ ×ÐÚàëÒÐîéÕÙ áÚÞÑÚÞÙ.

²Þ×ÜÞÖÝë ÚÞÜÜÕÝâÐàØØ (ÚÐÚ Ò shell "#.........").

¿àØÜÕà:
´Ûï ÔÐÛìÝÕÙèØå ßàØÜÕàÞÒ ÒÞ×ìÜÕÜ ÒåÞÔÝÞÙ äÐÙÛ "f-awk"
( äÐÜØÛØï ØÝØæØÐÛë ÓÞÔ-ßàØÕÜÐ-ÝÐ-àÐÑÞâã ÒÞ×àÐáâ ):

¸ÒÐÝÞÒ ¸.¸. 1980 50
¿ÕâàÞÒ °.². 1979 40
ÁØÔÞàÞÒ Á.º. 1979 40
ÅÒÕÔÞàÞÒ ¸.Å. 1970 60

awk '{print}' f-awk # ÒëÔÐÕâ ÒÕáì âÕÚáâ;
echo
awk '/ÔÞ/ {print}' f-awk # ÒëÔÐÕâ áâàÞÚØ, ÓÔÕ Õáâì "ÔÞ".
echo
awk '/ÔÞ/ {}' f-awk # ÒëÔÐÕâ áâàÞÚØ, ÓÔÕ Õáâì "ÔÞ"
echo
awk '/ÔÞ/ {print("¿àØÒÕâ!")}' f-awk

ÀÕ×ãÛìâÐâ:
¸ÒÐÝÞÒ ¸.¸. 1980 50
¿ÕâàÞÒ °.². 1979 40
ÁØÔÞàÞÒ Á.º. 1979 40
ÅÒÕÔÞàÞÒ ¸.Å. 1970 60

ÁØÔÞàÞÒ Á.º. 1979 40
ÅÒÕÔÞàÞÒ ¸.Å. 1970 60

ÁØÔÞàÞÒ Á.º. 1979 40
ÅÒÕÔÞàÞÒ ¸.Å. 1970 60

¿àØÒÕâ!
¿àØÒÕâ!

ÁãéÕáâÒãÕâ ÔÒÐ ÞßÕàÐâÞàÐ áßÕæØÐÛìÝÞÓÞ ÒØÔÐ ("BEGIN"-
ÝÐçÐÛìÝëÕ ãáâÐÝÞÒÚØ Ø "END" - "ßÞáÛÕÔÕÙáâÒØï"):

BEGIN {ÔÕÙáâÒØÕ}
èÐÑÛÞÝ {ÔÕÙáâÒØÕ}
èÐÑÛÞÝ {ÔÕÙáâÒØÕ}
. . .
END {ÔÕÙáâÒØÕ}


2. ²Ë·¾² awk

²Þ×ÜÞÖÝë ÔÒÐ ÞáÝÞÒÝëå ÒÐàØÐÝâÐ:

1) awk [-Fc] 'prog.awk' [files]

ÍâÞ ßàÞáâÕÙèØÙ áÛãçÐÙ, ÚÞÓÔÐ ßàÞÓàÐÜÜÐ (×ÐÚÛîçÕÝÝÐï Ò
ÚÐÒëçÚØ " ' ") ÝÐåÞÔØâáï Ò âÕÛÕ ÚÞÜÐÝÔë,
"-Fc" - äÛÐÓ, ÜÕÝïîéØÙ áâÐÝÔÐàâÝëÙ àÐ×ÔÕÛØâÕÛì ßÞÛÕÙ ÝÐ "c"
"file" - ØÜï äÐÙÛÐ ØáåÞÔÝëå ÔÐÝÝëå, ßàØ ÕÓÞ ÞâáãâáâÒØØ - áÞ
áâÐÝÔÐàâÝÞÓÞ ÒåÞÔÐ. (ÍâÞâ äÞàÜÐâ ØáßÞÛ×ÞÒÐÝ Ò ÝÐçÐÛìÝëå ßàØÜÕàÐå).

cat f-awk | awk '/ÔÞ/ {print}'

Ø

awk '/ÔÞ/ {print}' < f-awk

ÔÐîâ àÕ×ãÛìâÐâ, ÐÝÐÛÞÓØçÝëÙ

awk '/ÔÞ/ {print}' f-awk

´Ûï ÔÕÜÞÝáâàÐæØØ ÔÕÙáâÒØï äÛÐÓÐ "-Fc" àÐááÜÞâàØÜ Òë×ÞÒë:

awk '/ÔÞ/ {print($2)}' f-awk
awk -F0 '/ÔÞ/ {print($2)}' f-awk

½Ð íÚàÐÝ ÑãÔÕâ ÒëÒÕÔÕÝÞ:

Á.º.
¸.Å.

6

¿ÕàÒÐï ÚÞÜÐÝÔÐ "awk" ÒëÒÕÔÕâ ÒâÞàëÕ ßÞÛï (ÑÛÐÓÞÔÐàï
ßÞ×ØæØÞÝÝÞÙ ßÕàÕÜÕÝÝÞÙ "$2") áâàÞÚ, áÞÔÕàÖÐéØÕ "ÔÞ". (ºáâÐâØ,
ßÞ×ØæØÞÝÝÐï ßÕàÕÜÕÝÝÐï "$0" áÞÞâÒÕâáÒãÕâ ÒáÕÙ áâàÞÚÕ).
²Þ ÒâÞàÞÜ áÛãçÐÕ, ÑÛÐÓÞÔÐàï äÛÐÓã "-F" áâÐÝÔÐàâÝëÕ
àÐ×ÔÕÛØâÕÛØ ×ÐÜÕÝÕÝë ÝÐ áØÜÒÞÛ "0", â.Õ. âÕßÕàì ÒëÑàÐÝÝëÕ áâàÞÚØ
ÒÞáßàØÝØÜÐîâáï, ÚÐÚ àÐ×ÑØâëÕ ÝÐ áÛÕÔãîéØÕ ßÞÛï:

ÁØÔÞàÞÒ Á.º. 1979 40
---------------------^--------------------
1-Õ ßÞÛÕ 2-Õ ßÞÛÕ (ßãáâÞ)

ÅÒÕÔÞàÞÒ ¸.Å. 1970 60
-----------------^---^--------------------
1-Õ ßÞÛÕ 2-Õ 3-Õ ßÞÛÕ (ßãáâÞ)


2) awk [-Fc] -f prog.awk [files]

ÄÛÐÓ "-f" ÓÞÒÞàØâ Þ âÞÜ, çâÞ awk-ßàÞÓàÐÜÜã ÝÐÔÞ ÑàÐâì Ø×
äÐÙÛÐ, ØÜï ÚÞâÞàÞÓÞ ãÚÐ×ÐÝÞ áÛÕÔÞÜ (ØÜï ÜÞÖÕâ Ñëâì ßàÞØ×ÒÞÛìÝëÜ Ø
àÐáèØàÕÝØÕ ".awk" ÔÞÑÐÒÛÕÝÞ ×ÔÕáì ßàÞáâÞ Ø× íáâÕâØçÕáÚØå
áÞÞÑàÐÖÕÝØÙ).

3. awk-¿µÀµ¼µ½½Ëµ ¸ ²ËÀ°¶µ½¸Ï

² ï×ëÚÕ awk ÒëÔÕÛïîâáï ÔÒÕ Óàãßßë ßÕàÕÜÕÝÝëå:
ßàÕÔÞßàÕÔÕÛÕÝÝëÕ Ø ÔÕÚÛÐàØàÞÒÐÝÝëÕ Ò ßàÞÓàÐÜÜÕ. ¸áåÞÔÝëÕ ×ÝÐçÕÝØï
ßàÕÔÞßàÕÔÕÛÕÝÝëå ßÕàÕÜÕÝÝëå ãáâÐÝÐÒÛØÒÐîâáï ØÝâÕàßàÕâÐâÞàÞÜ awk Ò
ßàÞæÕááÕ ×ÐßãáÚÐ Ø ÒëßÞÛÝÕÝØï awk-ßàÞÓàÐÜÜë.
º ßàÕÔÞßàÕÔÕÛÕÝÝëÜ ÞâÝÞáïâáï: ÃÜÞÛçÐÝØï:
NR ÝÞÜÕà âÕÚãéÕÙ áâàÞÚØ;
NF çØáÛÞ ßÞÛÕÙ Ò âÕÚãéÕÙ áâàÞÚÕ;
RS àÐ×ÔÕÛØâÕÛì áâàÞÚ ÝÐ ÒÒÞÔÕ; "\0"
FS àÐ×ÔÕÛØâÕÛì ßÞÛÕÙ ÝÐ ÒÒÞÔÕ; ßàÞÑÕÛ Ø/ØÛØ âÐÑãÛïæØï
ORS àÐ×ÔÕÛØâÕÛì áâàÞÚ ÝÐ ÒëÒÞÔÕ; RS
OFS àÐ×ÔÕÛØâÕÛì ßÞÛÕÙ ÝÐ ÒëÒÞÔÕ; FS
OFMT äÞàÜÐâ ÒëÒÞÔÐ çØcÛ; "%.6g"
FILENAME ØÜï ÒåÞÔÝÞÓÞ äÐÙÛÐ.

¿àÞçØÜ ßÕàÕÜÕÝÝëÜ ßÞÛì×ÞÒÐâÕÛì ÜÞÖÕâ ßàØáÒÐØÒÐâì ÝÐçÐÛìÝëÕ
×ÝÐçÕÝØï. ¿Þ ãÜÞÛçÐÝØî "0" ØÛØ ßãáâÐï áâàÞÚÐ (çâÞ ×ÔÕáì
àÐÒÝÞ×ÝÐçÝÞ!).
ÂØßë ßÕàÕÜÕÝÝëå:
- ßÞ×ØæØÞÝÝëÕ,
- çØáÛÐ á ßÛÐÒÐîéÕÙ âÞçÚÞÙ,
- áâàÞÚÐ áØÜÒÞÛÞÒ,
- ÜÐááØÒ.

¸ÝâÕàßàÕâÐâÞà awk àÐááÜÐâàØÒÐÕâ ßÕàÕÜÕÝÝãî ÚÐÚ áâàÞÚÞÒãî,
ßÞÚÐ ÝÕ ÒÞ×ÝØÚÐÕâ ÝÕÞÑåÞÔØÜÞáâì ÒëßÞÛÝØâì ÞßÕàÐæØØ:
- ÕáÛØ ßàÞÑÕÛ (ÚÞÝÚÐâÕÝÐæØï), âÞ áâàÞÚØ;
- ÕáÛØ "+", âÞ çØáÛÐ á ßÛÐÒÐîéÕÙ âÞçÚÞÙ.

¿àØÜÕàë:

awk '{a = $3 $4; print a}' f-awk
awk '{a = $3+$4; print a}' f-awk

ÀÕ×ãÛìâÐâ:
198050
197940
197940
197060
2030
2019
2019
2030

awk '{}
END {a = 2 + 2 ; print a}' < f-awk
awk '{}
END {a = 2 + "2" ; print a}' < f-awk
awk '{}
END {a = 2 + "ÔÒÐ" ; print a}' < f-awk
awk '{}
END {a = "ÔÒÐ"+"ÔÒÐ" ; print a}' < f-awk
awk '{}
END {a = 2.2 + 2.000 ; print a}' < f-awk

ÀÕ×ãÛìâÐâ:
4
4
2
0
4.2

¼ÐááØÒ ÝÕ ÞÑ'ïÒÛïÕâáï, Ð ÝÐçØÝÐÕ áãéÕáâÒÞÒÐâì Ò ÜÞÜÕÝâ
ßÕàÒÞÓÞ ØáßÞÛì×ÞÒÐÝØï. ¸ÝÔÕÚá ÜÐááØÒÐ - ÛîÑÞÕ ÝÕÝãÛÕÒÞÕ ×ÝÐçÕÝØÕ
ØÛØ áâàÞÚÐ. ¼ÐááØÒë ÐááÞæØÐâØÒÝëÕ, â.Õ. ÝÕ ßÞ ÒëçØáÛïÕÜÞÜã
ØÝÔÕÚáã, Ð ßÞ áÞÒßÐÔÕÝØî áÞÔÕàÖÐÝØï, ÝÐßàØÜÕà:
day [Jan][31] = Mon
day [Feb][01] = Tue
day [Feb][02] = Wed

¼ÐááØÒë ãÔÞÑÝÞ ØáßÞÛì×ÞÒÐâì ßàØ áãÜÜØàÞÒÐÝØïå, ÝÐßàØÜÕà
×ÐßØáØ ÒëßÛÐâ ØÜÕîâ ÒØÔ (äÐÙÛ "p-1"):
John 100
Mary 200
Mary 200
John 100
John 300

awk '{sum[$1] += $2; print $1 sum[$1]} ' < p-1

ÀÕ×ãÛìâÐâ (ßÞØÜÕÝÝëÙ ÝÐàÐáâÐîéØÙ ØâÞÓ):
John100
Mary200
Mary400
John200
John500

¾ßÕàÐæØØ ÚÐÚ Ò ÁØ:
=, +=, -=, *=, /=, %=, +, /, %, ++, --.

ÁàÐÒÝÕÝØï çØáÕÛ, ÕáÛØ ÞÑÐ çØáÛÐ, ØÝÐçÕ - áâàÞÚ:
<, <=, ==, !=, >=, >

»ÞÓØçÕáÚØÕ ÞßÕàÐæØØ:
!, ||, &&

¾ßÕàÐæØï "ßàÞÑÕÛ" - ÚÞÝÚÐâÕÝÐæØï.


4. ¿À¸¼µÀË awk-¿À¾³À°¼¼

1) awk '{print ($2, $3)}' f-awk

ÀÕ×ãÛìâÐâ:
¸.¸. 1980
°.². 1979
Á.º. 1979
¸.Å. 1970

2) awk '/Õ/ {print ($2, $3)}' f-awk

ÀÕ×ãÛìâÐâ:
°.². 1979
¸.Å. 1970

3) awk '/Õ/ {print ($1, 2000 - $3)}' f-awk

ÀÕ×ãÛìâÐâ:
¿ÕâàÞÒ 21
ÅÒÕÔÞàÞÒ 30

4) awk '{ s = s + $4}
END {print ("ÁãÜÜÐàÝëÙ ÒÞ×àÐáâ:" s)
print ("ÁàÕÔÝØÙ ÒÞ×àÐáâ:" s/NR)}' f-awk

ÀÕ×ãÛìâÐâ:
ÁãÜÜÐàÝëÙ ÒÞ×àÐáâ:190
ÁàÕÔÝØÙ ÒÞ×àÐáâ:47.5

5) awk '{ s += $4 }
{print("NR="NR, "NF="NF)}
END {print ("FILENAME=" FILENAME)
print ("·ÝÐçÕÝØÕ ßÞ×ØæØÞÝÝÞÙ ßÕàÕÜÕÝÝÞÙ" $4 "\"ßãáâÞ\" \
ßÞáÛÕ ÞÚÞÝçÐÝØï ßàÞáÜÞâàÐ)")
print ("ÁãÜÜÐàÝëÙ ÒÞ×àÐáâ:" s)
print ("ÁàÕÔÝØÙ ÒÞ×àÐáâ:" s/NR)}' f-awk

ÀÕ×ãÛìâÐâ:
NR=1 NF=4
NR=2 NF=4
NR=3 NF=4
NR=4 NF=4
FILENAME=f-awk
·ÝÐçÕÝØÕ ßÞ×ØæØÞÝÝÞÙ ßÕàÕÜÕÝÝÞÙ"ßãáâÞ" ßÞáÛÕ ÞÚÞÝçÐÝØï ßàÞáÜÞâàÐ)
ÁãÜÜÐàÝëÙ ÒÞ×àÐáâ:190
ÁàÕÔÝØÙ ÒÞ×àÐáâ:47.5


5. Áµ»µºÂ¾ÀË

·ÔÕáì "áÕÛÕÚâÞà" áÛÕÔãÕâ ßÞÝØÜÐâì, ÚÐÚ àÐáèØàÕÝØÕ ßÞÝïâØï
"èÐÑÛÞÝ", ßÞáÚÞÛìÚã âÐÜ ÓÔÕ Ò áâàãÚâãàÕ ÚÞÜÐÝÔë ãÚÐ×ÐÝ èÐÑÛÞÝ, Ò
ÞÑéÕÜ áÛãçÐÕ ÜÞÖÕâ áâÞïâì ÛîÑÞÙ áÕÛÕÚâÞà.
·°¼µÇ°½¸µ. ¾âÚàëÒÐîéÐï áÚÞÑÚÐ ÔÕÙáâÒØï "{" ÔÞÛÖÝÐ Ñëâì Ò
áâàÞÚÕ áÕÛÕÚâÞàÐ.
² ÚÐçÕáâÒÕ áÕÛÕÚâÞàÐ ÜÞÖÕâ Ñëâì:
1) ÒëàÐÖÕÝØÕ;
2) èÐÑÛÞÝ;
3) Øå ÚÞÜÑØÝÐæØï.

ÁÞÞâÒÕâáÒãîéØÕ ßàØÜÕàë:
1) $3 != $4 && $3 > 1970
$3 % 2 == 1
$1=="¸ÒÐÝÞÒ" - ÚÐÒëçÚØ, çâÞÑë ÒÞáßàØÝØÜÐÛÞáì, ÚÐÚ áâàÞÚÐ.

2) /ab/ ÞâÛØçÝÞ Þâ /a b/, / ab/ Ø /ab /
NßÞÛï ^èÐÑÛÞÝ - ßÞ áÞÒßÐÔÕÝØî
NßÞÛï !^èÐÑÛÞÝ - ßÞ ÝÕáÞÒßÐÔÕÝØî

¿àØÜÕà:
awk '$3~0 {print} ' < f-awk
echo
awk '$3!~0 {print} ' < f-awk

¸ÒÐÝÞÒ ¸.¸. 1980 50
ÅÒÕÔÞàÞÒ ¸.Å. 1970 60

¿ÕâàÞÒ °.². 1979 40
ÁØÔÞàÞÒ Á.º. 1979 40

3) ÈÐÑÛÞÝ ÜÞÖÕâ äÞàÜØàÞÒÐâì ÜÝÞÖÕáâÒÞ ÞÑàÐ×æÞÒ ØÛØ
ãÚÐ×ëÒÐâì, Ò ÚÐÚÞÜ ÜÕáâÕ ßÞÛï ØáÚÐâì:
/^a/ - ßÞÛÕ ÝÐçØÝÐÕâáï á "a"
/a$/ - ßÞÛÕ ÚÞÝçÐÕâáï "a"
\+ - íÚàÐÝØàãÕâ ÞßÕàÐâÞà
[abc] - ÛîÑÞÙ Ø× áØÜÒÞÛÞÒ "a", "b" Ø "c"
[a-à] - ÛîÑÞÙ áØÜÒÞÛ ÔØÐßÐ×ÞÝÐ
* - 0 ØÛØ ÑÞÛìèÕ ÒåÞÖÔÕÝØÙ àÕÓãÛïàÝÞÓÞ ÒëàÐÖÕÝØï
+ - 1 ØÛØ ÑÞÛìèÕ ÒåÞÖÔÕÝØÙ àÕÓãÛïàÝÞÓÞ ÒëàÐÖÕÝØï
? - 0 ØÛØ 1 ÒåÞÖÔÕÝØÕ àÕÓãÛïàÝÞÓÞ ÒëàÐÖÕÝØï
ab|cd - "ab" ØÛØ "cd"

¿àØÜÕàë áÞçÕâÐÝØÙ:
awk ' $3~/(7[0-9])$/ {print} ' f-awk

ÀÕ×ãÛìâÐâ:
¿ÕâàÞÒ °.². 1979 40
ÁØÔÞàÞÒ Á.º. 1979 40
ÅÒÕÔÞàÞÒ ¸.Å. 1970 60

ÂÞ Õáâì Ò âàÕâìÕÜ ßÞÛÕ ÒëÔÕÛØâì 70-Õ ÓÞÔë (7 Ø ÕéÕ ÞÔÝÐ
æØäàÐ Þâ ÚÞÝæÐ ßÞÛï).

6. µÉµ ¿À¸¼µÀË


1) awk '$1=="¸ÒÐÝÞÒ" {print} ' f-awk

ÀÕ×ãÛìâÐâ:
¸ÒÐÝÞÒ ¸.¸. 1980 50

2) awk '$4/2==30 {print} ' f-awk

ÀÕ×ãÛìâÐâ:
ÅÒÕÔÞàÞÒ ¸.Å. 1970 60

3) awk '$3 != $4 && $3 > 1970 {print} ' f-awk

ÀÕ×ãÛìâÐâ:
¸ÒÐÝÞÒ ¸.¸. 1980 50
¿ÕâàÞÒ °.². 1979 40
ÁØÔÞàÞÒ Á.º. 1979 40

4) awk '$1~/ÝÞÒ$/ {print} ' f-awk

ÀÕ×ãÛìâÐâ:
¸ÒÐÝÞÒ ¸.¸. 1980 50

5) awk '/^¸Ò|ÔÞà/ {print} ' f-awk

ÀÕ×ãÛìâÐâ:
¸ÒÐÝÞÒ ¸.¸. 1980 50
ÁØÔÞàÞÒ Á.º. 1979 40
ÅÒÕÔÞàÞÒ ¸.Å. 1970 60

6) awk '/1980/,/1979/ {print} ' f-awk

ÀÕ×ãÛìâÐâ:
¸ÒÐÝÞÒ ¸.¸. 1980 50
¿ÕâàÞÒ °.². 1979 40


7. ´µ¹Á²¸Ï

² awk ÒÞ×ÜÞÖÝë áÛÕÔãîéØÕ ÔÕÙáâÒØï:
1) ßàØáÒÐØÒÐÝØï ÒëàÐÖÕÝØÙ;
2) ÞßÕàÐâÞàë ãßàÐÒÛÕÝØï
3) ÞßÕàÐâÞàë ÒëÒÞÔÐ;
4) ÒáâàÞÕÝÝëÕ äãÝÚæØØ.

¾¿µÀ°Â¾ÀË Ã¿À°²»µ½¸Ï

¿àÞáâÕÙèØÕ ÞßÕàÐâÞàë

exit - ×ÐÒÕàèØâì ÒëßÞÛÝÕÝØÕ ßàÞÓàÐÜÜë;
next - ßÕàÕÙâØ Ú áÛÕÔãîéÕÙ áâàÞÚÕ,
ãßàÐÒÛÕÝØÕ ÝÐ ÝÐçÐÛÞ awk-ßàÞÓàÐÜÜë;
break - ÒëåÞÔ Ø× æØÚÛÐ;
continue - ßÕàÕåÞÔ Ú áÛÕÔãîéÕÙ ØâÕàÐæØØ;

ÁâàãÚâãàÝëÕ ÞßÕàÐâÞàë

if (ãáÛÞÒØÕ) {ÞßÕàÐâÞàë} [else {ÞßÕàÐâÞàë}]
while (ãáÛÞÒØÕ) {ÞßÕàÐâÞàë}
for (ÒëàÐÖÕÝØÕ; ãáÛÞÒØÕ; ÒëàÐÖÕÝØÕ) {ÞßÕàÐâÞàë}
for (ØÝÔÕÚá in ØÜï_ÜÐááØÒÐ) {ÞßÕàÐâÞàë}

ÁâàãÚâãàÝëÕ ÞßÕàÐâÞàë Ò ×ÝÐçØâÕÛìÝÞÙ áâÕßÕÝØ ÐÝÐÛÞÓØçÝë
áÞÞâÒÕâáÒãîéØÜ ÞßÕàÐâÞàÐÜ ÁØ.
² ßÞáÛÕÔÝÕÜ áÛãçÐÕ ÔÛï ÚÐÖÔÞÓÞ ØÝÔÕÚáÐ ÒëßÞÛÝïÕâáï ÑÛÞÚ.
ÂÕÚáâÞÒëÕ ØÝÔÕÚáë àÐááÜÐâØàÒÐîâáï Ò ÛÕÚáØÚÞÓàÐäØçÕáÚÞÜ ßÞàïÔÚÕ.

¿àØÜÕàë

1) awk ' $4~/40/ {if($3<=1980) {print("ÄÐÜØÛØï: " $1 )
M["40"]++}}
$4~/50/ {M["50"]++}
END {for(i in M)
{print(" i =" i " M[" i "]=" M[i])}} ' f-awk

ÀÕ×ãÛìâÐâ:
ÄÐÜØÛØï: ¿ÕâàÞÒ
ÄÐÜØÛØï: ÁØÔÞàÞÒ
i =40 M[40]=2
i =50 M[50]=1

2) awk ' BEGIN {ORS = " "}
{ for(k=NF; k>0; --k) {print $k}
{print RS}
} ' f-awk |
sed 's/^ //'

ÀÕ×ãÛìâÐâ:
50 1980 ¸.¸. ¸ÒÐÝÞÒ
40 1979 °.². ¿ÕâàÞÒ
40 1979 Á.º. ÁØÔÞàÞÒ
60 1970 ¸.Å. ÅÒÕÔÞàÞÒ

·ÔÕáì, ÚàÞÜÕ Ø×ÜÕÝÕÝØï ÞçÕàÕÔÝÞáâØ ßÞÛÕÙ Ò áâàÞÚÕ ÝÐ
ßàÞâØÒÞßÞÛÞÖÝÞÕ (çâÞ ÔÕÛÐÕâ æØÚÛ "for"), ßàÕÔÒÐàØâÕÛìÝÞ
ãáâÐÝÐÒÛØÒÐÕâáï ÒëåÞÔÝÞÙ àÐ×ÔÕÛØâÕÛì - ßàÞÑÕÛ Ø ÒÕáì àÕ×ãÛìâÐâ
ßàÕÔÒÐàØâÕÛìÝÞ ÒëÔÐÕâáï Ò ÞÔÝã áâàÞÚã, ßÞíâÞÜã ßÞáÛÕ ÞÑàÐÑÞâÚØ
ÚÐÖÔÞÙ áâàÞÚØ ÒëÔÐÕâáï ÚÞÜÐÝÔÐ "print RS" ÔÛï ßÕàÕÒÞÔÐ ÒëåÞÔÝÞÙ
áâàÞÚØ. ÀÕÔÐÚâÞà "sed" ßÞÔÚÛîçÕÝ çÕàÕ× ÚÞÝÒÕÙÕà, çâÞÑë ãÑàÐâì
ÒÞ×ÜÞÖÝëÕ ßàÞÑÕÛë Ò ÝÐçÐÛÕ áâàÞÚØ.
ÁãéÕáâÒÕÝÝÐï ÔÕâÐÛì. µáÛØ ×ÐßãáâØâì ÛØèì ÑÐ×ÞÒãî áâàãÚâãàã

awk '{ for(k=NF; k>0; --k) {print $k}}' f-awk

âÞ ÒáÕ ßÞÛï ØáåÞÔÝÞÙ âÐÑÛØæë á Ø×ÜÕÝÕÝØïÜØ ßÞàïÔÚÐ ÒÝãâàØ
ßàÕÖÝØå áâàÞÚ ßÞÛãçØÜ ÒëâïÝãâëÜØ Ò ÞÔØÝ áâÞÛÑÕæ ßÕàÕÒÞÔÞÜ áâàÞÚØ:

50
1980
¸.¸.
¸ÒÐÝÞÒ
40
1979
°.².
¿ÕâàÞÒ
40
1979
Á.º.
ÁØÔÞàÞÒ
60
1970
¸.Å.
ÅÒÕÔÞàÞÒ

¾ÔÝÐÚÞ, ÕáÛØ ßÞáâÐÒØÜ ";" áàÐ×ã ßÞáÛÕ ãáÛÞÒØï, â.Õ. áÔÕÛÐÕÜ
ßãáâÞÕ âÕÛÞ æØÚÛÐ, ×Ð ßàÕÔÕÛë ÚÞâÞàÞÓÞ ÒëÝÕáÕÝ "print $k"

awk '{ for(k=NF; k>0; --k); {print $k}}' f-awk

âÞ ßÞÛãçØÜ ØáåÞÔÝãî âÐÑÛØæã

¸ÒÐÝÞÒ ¸.¸. 1980 50
¿ÕâàÞÒ °.². 1979 40
ÁØÔÞàÞÒ Á.º. 1979 40
ÅÒÕÔÞàÞÒ ¸.Å. 1970 60

ßÞáÚÞÛìÚã "$k" ßÞáÛÕ ÒëåÞÔÐ Ø× æØÚÛÐ ÑãÔÕâ ØÜÕâì ×ÝÐçÕÝØÕ
"0", Ð "$0" - áÞÞâÒÕâáÒãÕâ ÒáÕÙ áâàÞÚÕ Ò ÚÐçÕáâÒÕ ×ÝÐçÕÝØï(!), âÞ
"print $k" ÑãÔÕâ ßÞáÛÕ ÚÐÖÔÞÓÞ æØÚÛÐ ßÕçÐâÐâì ßÞÛÝëÕ áâàÞÚØ.


8. ²²¾´ ¸ ²Ë²¾´ ´°½½ËÅ

² ÞÑéÕÜ áÛãçÐÕ Ò ÚÞÜÐÝÔÕ awk ÜÞÖÕâ Ñëâì ãÚÐ×ÐÝÞ ÝÕáÚÞÛìÚÞ
äÐÙÛÞÒ.
½ÐßÞÜÝØÜ äÞàÜÐâë Òë×ÞÒÐ ÚÞÜÐÝÔë:

awk [-Fc] 'prog.awk' [file ...]
awk [-Fc] -f prog.awk [file ...]
^
ÄÐÙÛë ÞÑàÐÑÐâëÒÐîâáï ßÞáÛÕÔÞÒÐâÕÛìÝÞ Ò ãÚÐ×ÐÝÝÞÜ ßÞàïÔÚÕ.
ÍâÞ ÜÞÖÝÞ ØáßÞÛì×ÞÒÐâì ÔÛï "ÝÐáâàÞÙÚØ" awk ÚÞÜÐÝÔë ßàØ
ÞÑàÐÑÞâÚÕ ßÞáÛÕÔãîéØå äÐÙÛÞÒ.

¿ãáâì äÐÙÛ "f0" ØÜÕÕâ ÒØÔ:

60 ÁØÔÞàÞÒ

° äÐÙÛ awk-ßàÞÓàÐÜÜë "prim.awk" ØÜÕÕâ ÒØÔ:

FILENAME == "f0" { # ÕáÛØ ßàÞáÜÐâàØÒÐÕâáï äÐÙÛ "f0"
w1 = $2 # ßàØáÒÐØÒÐîâáï ×ÝÐçÕÝØï ßÕàÕÜÕÝÝëÜ
w2 = $1 # w1 - ÁØÔÞàÞÒ, w2 - 60
}
$1 == w1 { print ("äÐÜØÛØï: "$1)} # Þ×ÝÐçÕÝÝëÕ ßÕàÕÜÕÝÝëÕ
$4 == w2 { print ("ÓÞÔë: " $4)} # ØáßÞÛì×ãîâáï Ò
# áÕÛÕÚâÞàÐå

ÂÞÓÔÐ ßàØ Òë×ÞÒÕ ÚÞÜÐÝÔë

awk -f prim.awk f0 f-awk

ÀÕ×ãÛìâÐâ:

äÐÜØÛØï: ÁØÔÞàÞÒ
ÓÞÔë: 60

ÂÞ Õáâì ÒâÞàÞÕ ßÞÛÕ äÐÙÛÐ "f0" ÔÐÕâ ×ÝÐçÕÝØÕ ßÕàÕÜÕÝÝÞÙ
"w1", Ð ßÕàÒÞÕ - "w2". ÍâØ ßÕàÕÜÕÝÝëÕ ØáßÞÛì×ãîâáï Ò áÕÛÕÚâÞàÐå
ßàØ ÞÑàÐÑÞâÚÕ äÐÙÛÐ "f-awk".

¸×ÜÕÝØÜ ßàÞÓàÐÜÜã Ò äÐÙÛÕ "f-awk":

FILENAME == "f0" {
w1 = $2
w2 = $1
next
}
{ print ("äÐÜØÛØï: "$1); next}
$4 == w2 { print ("ÓÞÔë: " $4)}

ÀÕ×ãÛìâÐâ:
äÐÜØÛØï: ¸ÒÐÝÞÒ
äÐÜØÛØï: ¿ÕâàÞÒ
äÐÜØÛØï: ÁØÔÞàÞÒ
äÐÜØÛØï: ÅÒÕÔÞàÞÒ

µáÛØ ØáÚÛîçØâì ßÕàÒëÙ ÞßÕàÐâÞà "next", âÞ Ò ÒëåÞÔÝÞÜ äÐÙÛÕ
ßÞïÒØâáï ÔÞßÞÛÝØâÕÛìÝÞ ßÕàÒÐï áâàÞÚÐ:

äÐÜØÛØï: 60

ßÞáÚÞÛìÚã ÒëÑØàÐÕâáï áÝÞÒÐ ßÕàÒÞÕ ßÞÛÕ Ò ßÕÒÞÜ äÐÙÛÕ ("f0").
µáÛØ ØáÚÛîçØâì Ø ÒâÞàÞÙ "next", âÞ Ò ÒëåÞÔÝÞÜ äÐÙÛÕ ßÞïÒØâáï
ÔÞßÞÛÝØâÕÛìÝÞ ßÞáÛÕÔÝïï áâàÞÚÐ:

ÓÞÔë: 60

ÚÞâÞàÐï àÐÝÕÕ ÝÕ ÒëÒÞÔØÛÐáì, âÐÚ ÚÐÚ Ò ßàÕÔèÕáâÒãîéØÙ
ÞßÕàÐâÞà " { print ("äÐÜØÛØï: "$1)}" ×ÐÚÐÝçØÒÐÛ àÐÑÞâã ÝÐ
¿¾Á»µ´½µ¹ áâàÞÚÕ äÐÙÛÐ "f-awk", ßÞíâÞÜã "next" ßàÞßãáÚÐÛ
ßÞáÛÕÔãîéãî ÚÞÜÐÝÔÝãî áâàÞÚã
$4 == w2 { print ("ÓÞÔë: " $4)}

¸ ÕéÕ ÞÔÝÐ ÜÞÔØäØÚÐæØï Ò áÒï×Ø á ÒÒÞÔÞÜ ÔÐÝÝëå á âÕàÜØÝÐÛÐ.
²ë×ÞÒ ÚÞÜÐÝÔë ÑãÔÕâ:

awk -f prim.awk f0 f-awk

° äÐÙÛ "prim.awk" ßàØÜÕâ ÒØÔ:

BEGIN { print ("²ÒÕÔØâÕ ÓÞÔë Ø äÐÜØÛØî: ")}
FILENAME == "-" {
w1 = $2
w2 = $1
next
}
$1 == w1 { print ("äÐÜØÛØï: "$1); next}
$4 == w2 { print ("ÓÞÔë: " $4)}


9. ²ÁÂÀ¾µ½½Ëµ ÄýºÆ¸¸

²áâàÞÕÝÝëÕ äãÝÚæØØ:
sin (expr) áØÝãá expr
cos (expr) ÚÞáØÝãá expr
exp (expr) ÒÞ×ÒÕÔÕÝØÕ Ò áâÕßÕÝì expr
log (expr) ÝÐâãàÐÛìÝëÙ ÛÞÓÞàØäÜ expr
sqrt (expr) Ø×ÒÛÕçÕÝØÕ ÚÞàÝï expr
int (expr) æÕÛÐï çÐáâì çØáÛÐ
length (s) ÔÛØÝÐ áâàÞÚØ s
printf (fmt, ...) äÞàÜÐâØàÞÒÐÝØÕ (ÐÝÐÛÞÓØçÝÞ ÁØ)
ßÞ áßÕæØäØÚÐæØØ fmt.
substr (s, m, n) ßÞÔáâàÞÚÐ Ò n áØÜÒÞÛÞÒ áâàÞÚØ s,
ÝÐçØÝÐîéÐïáï á m.
getline () çâÕÝØÕ áÛÕÔãîéÕÙ áâàÞÚØ.
0 - ÚÞÝÕæ äÐÙÛÐ, ØÝÐçÕ 1.
index (s1, s2) ÝÞÜÕà ßÞ×ØæØØ,
á ÚÞâÞàÞÙ s1 áÞÒßÐÔÐÕâ á s2, ØÝÐçÕ 0.
split (s, M, c) áâàÞÚÐ s àÐ×ÑØÒÐÕâáï íÛÕÜÕÝâë ÜÐááØÒÐ M
ßÞ àÐ×ÔÕÛØâÕÛî c (ßÞ ãÜÞÛçÐÝØî FS=" ");
äãÝÚæØï ÒÞ×ÒàÐéÐÕâ çØáÛÞ ßÞÛÕÙ.

¿àØÜÕàë.

1) awk ' BEGIN {FS = "."; a=0}
length ($1) > 8 {print (length ($1), $0);
a++
}
END {print ("½ÐÙÔÕÝÞ áâàÞÚ: " a) }' f-awk

ÀÕ×ãÛìâÐâ:
9 ÁØÔÞàÞÒ Á.º. 1979 40
10 ÅÒÕÔÞàÞÒ ¸.Å. 1970 60
½ÐÙÔÕÝÞ áâàÞÚ: 2

·ÔÕáâ ßÞÛï àÐ×ÔÕÛïîâáï ßÞ ".", ÒëÑØàÐîâáï áâàÞÚØ ã ÚÞâÞàëå
ÔÛØÝÐ ßÕàÒÞÓÞ ßÞÛï ÑÞÛìèÕ 8-ÜØ, Ø Øå ÔÛØÝÐ "length ($1)"
ßÕçÐâÐÕâáï ßÕàÕÔ áâàÞÚÞÙ "$0".

2) awk '{i=split($0, Name, ".");
for (j=1; j<=i; j++)
print ("Name[" j "]=" Name[j])
}' f-awk

ÀÕ×ãÛìâÐâ:
Name[1]=¸ÒÐÝÞÒ ¸
Name[2]=¸
Name[3]= 1980 50
Name[1]=¿ÕâàÞÒ °
Name[2]=²
Name[3]= 1979 40
Name[1]=ÁØÔÞàÞÒ Á
Name[2]=º
Name[3]= 1979 40
Name[1]=ÅÒÕÔÞàÞÒ ¸
Name[2]=Å
Name[3]= 1970 60

3) awk '{print (length)}' f-awk

ÀÕ×ãÛìâÐâ:
22
22
22
22

¿ÞáÚÞÛìÚã ÒáÕ áâàÞÚØ ÑëÛØ ÒëàÞÒÝÕÝë ßàÞÑÕÛÐÜØ, Ð Ò ÔÛØÝÕ
áâàÞÚØ ãçØâëÒÐîâáï ÒáÕ áØÜÒÞÛë ÔÞ ÚÞÝæÐ áâàÞÚØ.

4) awk '{printf "%7.2f %s\n", NR, $0}' f-awk
echo
awk '{printf "\t%s %s \n", NR, $0}' f-awk

ÀÕ×ãÛìâÐâ:
1.00 ¸ÒÐÝÞÒ ¸.¸. 1980 50
2.00 ¿ÕâàÞÒ °.². 1979 40
3.00 ÁØÔÞàÞÒ Á.º. 1979 40
4.00 ÅÒÕÔÞàÞÒ ¸.Å. 1970 60

1 ¸ÒÐÝÞÒ ¸.¸. 1980 50
2 ¿ÕâàÞÒ °.². 1979 40
3 ÁØÔÞàÞÒ Á.º. 1979 40
4 ÅÒÕÔÞàÞÒ ¸.Å. 1970 60

 

Rambler's Top100 Service ÏÝÔÕÚá æØâØàÞÒÐÝØï