UNIX — универсальная среда программирования
UNIX — универсальная среда программирования читать книгу онлайн
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями
shell.
Для программистов-пользователей операционной системы UNIX.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
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
