Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«UNIX β€” ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ срСда программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 52

Автор ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½ Π‘Ρ€Π°ΠΉΠ°Π½ Уилсон

Π’ качСствС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° выполнСния арифмСтичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ рассмотрим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ число страниц ΠΏΠΎ 66 строк Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ. Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³ΠΎΠ½Π΅ нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ

pr
. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
prpages
:

$ cat prpages

# prpages: подсчСт числа страниц, Π²Ρ‹Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… pr

wc $* |

awk '!/total$/ { n += int(($1+55)/56) }

Β Β Β Β  ENDΒ Β Β Β Β Β  { print n }'

$

Команда

pr
ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π½Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ страницу 56 строк тСкста (это число опрСдСляСтся эмпиричСски). Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
wc
, которая Π½Π΅ содСрТит слово
total
Π² ΠΊΠΎΠ½Ρ†Π΅ строки, число страниц округляСтся, Π° Π·Π°Ρ‚Π΅ΠΌ выдСляСтся цСлая Ρ‡Π°ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
int
.

$ wc ch4.*

Β 753Β  3090 18129 ch4.1

Β 612Β  2421 13242 ch4.2

Β 637Β  2462 13455 ch4.3

Β 802Β  2986 16904 ch4.4

Β  50Β Β  213Β  1117 ch4.9

2854 11172 62847 total

$ prpages ch4.*

53

$

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ этого Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° запустим ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

pr
ΠΈ
awk
ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ:

$ pr ch4.* | awk 'END {print NR/66}'

53

$

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

awk
ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ строки символов. Π Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΊΠ°ΠΊ число ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ строку символов β€” зависит ΠΎΡ‚ контСкста. Π“Ρ€ΡƒΠ±ΠΎ говоря, Π² арифмСтичСских выраТСниях Ρ‚ΠΈΠΏΠ°
s+=$1
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ числовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² контСкстС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ со строками Ρ‚ΠΈΠΏΠ°
x=="abc"
β€” строковоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² нСясных случаях, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€
x>y
, β€” строковоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ явно числовыми. (ΠŸΡ€Π°Π²ΠΈΠ»Π° Ρ‡Π΅Ρ‚ΠΊΠΎ сформулированы Π² справочном руководствС ΠΏΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
awk
.) Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΡŽΡ‚ΡΡ пустой строкой. Π’ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… строки Π±ΡƒΠ΄ΡƒΡ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅

awk
Π΅ΡΡ‚ΡŒ нСсколько своих встроСнных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΠΎΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ², Ρ‚Π°ΠΊΠΈΡ…, ΠΊΠ°ΠΊ
NR
ΠΈ
FS
. Π˜Ρ… ΠΏΠΎΠ»Π½Ρ‹ΠΉ список ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² Ρ‚Π°Π±Π». 4.3, Π° Π² Ρ‚Π°Π±Π». 4.4 пСрСчислСны ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, выполняСмыС ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ.

FILENAME
Имя Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°
FS
Π‘ΠΈΠΌΠ²ΠΎΠ» раздСлСния ΠΏΠΎΠ»Π΅ΠΉ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ приняты ΠΏΡ€ΠΎΠ±Π΅Π» ΠΈ символ табуляции)
NF
Число ΠΏΠΎΠ»Π΅ΠΉ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ строки
NR
Число Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… строк
OFMT
Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ‹Π²ΠΎΠ΄Π° чисСл (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ принят
%g
; ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ руководству ΠΏΠΎ
printf(3y)
)
OFS
Π‘Ρ‚Ρ€ΠΎΠΊΠ° Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΠ»Π΅ΠΉ Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ (ΠΏΡ€ΠΎΠ±Π΅Π» ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ)
ORS
Π‘Ρ‚Ρ€ΠΎΠΊΠ°-Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ строк Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ (символ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ)
RS
Π‘ΠΈΠΌΠ²ΠΎΠ» раздСлСния Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… строк (символ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ)

Π’Π°Π±Π»ΠΈΡ†Π° 4.3: ВстроСнныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

awk

= += -= /= %=
ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅;
v ΠΎΡ€=expr
Π΅ΡΡ‚ΡŒ
v=v op (expr)
||
Π˜Π›Π˜:
expr1 || expr2
истина, Ссли ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ ΠΎΠ±Π° истинны;
expr2
Π½Π΅ вычисляСтся, Ссли
expr1
истинна
&&
И:
expr1 && expr2
истина, Ссли ΠΎΠ±Π° истинны;
expr2
Π½Π΅ вычисляСтся, Ссли expr1 лоТь
!
ΠžΡ‚Ρ€ΠΈΡ†Π°Π½ΠΈΠ΅ значСния выраТСния
>>= <<= == != ~ !~
ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ;
!
ΠΈ
!~
это соотвСтствиС ΠΈ нСсоотвСтствиС
пусто
ΠšΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡ строк
+ -
Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅
* / %
Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π΄Π΅Π»Π΅Π½ΠΈΠ΅, вычислСниС остатка
++ --
Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ (прСфиксноС ΠΈΠ»ΠΈ постпрСфиксноС)

Π’Π°Π±Π»ΠΈΡ†Π° 4.4: ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, выполняСмыС

awk
(Π² порядкС возрастания ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°)

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 4.8

Наша ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

prpages
подсказываСт ΠΈΠ½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, какая ΠΈΠ· Π½ΠΈΡ… выполняСтся быстрСС.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ большого Ρ„Π°ΠΉΠ»Π° ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ (судя ΠΏΠΎ ΠΎΠΏΡ‹Ρ‚Ρƒ) случайно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ копию сосСднСго слова, Ρ‡Ρ‚ΠΎ практичСски Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ происходит ΠΏΡ€Π΅Π΄Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ. Для устранСния Ρ‚Π°ΠΊΠΈΡ… ошибок Π² сСмСйствС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Writers Workbench (Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Π½Π°Π±ΠΎΡ€ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°) сущСствуСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

double
, ΠΎΡ‚Ρ‹ΡΠΊΠΈΠ²Π°ΡŽΡ‰Π°Ρ ΠΏΠ°Ρ€Ρ‹ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Ρ… сосСдних слов. НиТС ΠΏΠΎΠΊΠ°Π·Π°Π½Π° рСализация этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ
awk
: