UNIX — универсальная среда программирования - Керниган Брайан Уилсон
Ознакомительная версия. Доступно 29 страниц из 187
for (i = 1; i <= N; i++) # make a string of blanks blanks = blanks " " } { if ((n = length($0)) <= N) print else { for (i = 1; n > N; n -= N) { printf "%s\n", substr($0,i,N) i += N; } printf "%s%sn" , substr(blanks, 1, N-n), substr($0, I) } } 'На языке
awkblanksBEGINblanksif ((n=length($0)) <= N)...длина входной строки присваивается
nИзмените программу
foldДопустим, что вы намереваетесь написать программу
field n$ who | field 1для печати только имен, под которыми пользователи входят в систему. Язык
awkawk$ awk '{print $'$1'}'Здесь
$1awkawk "{print $$1}"Аргумент обрабатывается интерпретатором, поэтому
$$$1nawkДругим примером может служить программа
addup nawk '{s += $'$1'}END {print s}'В третьем примере вычисляются отдельные суммы значений каждого n-го поля и полная сумма:
awk 'BEGIN { n = '$1' }{ for (i=1; i <= n; i++) sum[i] += $1}END { for(i = 1; i <= n; i++) { printf "%6g ", sum[i] total += sum[i] } printf "; total = %6g ", total }'Нам удобнее было использовать часть
BEGINnОсновная трудность во всех приведенных выше примерах состоит не в том, чтобы следить за кавычками (хотя и это хлопотно), а в том, что программы, составленные показанным способом, могут читать только свой стандартный входной поток. Нет никакой возможности передать им сразу и параметр
nshellawkВ нашем последнем примере демонстрируются ассоциативные массивы, а также иллюстрируется взаимодействие с интерпретатором и частично показывается процесс разработки программы.
Задача состоит в создании системы, посылающей вам каждое утро почту с напоминанием об ожидаемых событиях. (Возможно, такая календарная система уже есть; см. руководство по
calendar(1)Прежде всего нужно предусмотреть место, где будет храниться календарь. Имеет смысл разместить его в файле с именем
calendar/usr/you$ cat calendarSep 30 день рождения мамыOct 1 обед с Джо, полденьOct 1 встреча в 16:00$Далее, необходимо уметь просматривать календарь, отыскивая определенную дату. Существует масса вариантов; мы остановимся на языке
awksedegrepcalendarmailНаконец, вам придется научиться автоматически и безотказно просматривать календарь каждый день, скажем, рано утром. Это можно сделать с помощью команды
atЕсли ограничить календарь таким форматом, в котором каждая строка начинается с названия месяца и числа (как это делает команда
dateОзнакомительная версия. Доступно 29 страниц из 187