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)
}
} '
На языке
awk
blanks
BEGIN
blanks
if ((n=length($0)) <= N)...
длина входной строки присваивается
n
Измените программу
fold
Допустим, что вы намереваетесь написать программу
field n
$ who | field 1
для печати только имен, под которыми пользователи входят в систему. Язык
awk
awk
$ awk '{print $'$1'}'
Здесь
$1
awk
awk "{print $$1}"
Аргумент обрабатывается интерпретатором, поэтому
$
$
$1
n
awk
Другим примером может служить программа
addup n
awk '{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
}'
Нам удобнее было использовать часть
BEGIN
n
Основная трудность во всех приведенных выше примерах состоит не в том, чтобы следить за кавычками (хотя и это хлопотно), а в том, что программы, составленные показанным способом, могут читать только свой стандартный входной поток. Нет никакой возможности передать им сразу и параметр
n
shell
awk
В нашем последнем примере демонстрируются ассоциативные массивы, а также иллюстрируется взаимодействие с интерпретатором и частично показывается процесс разработки программы.
Задача состоит в создании системы, посылающей вам каждое утро почту с напоминанием об ожидаемых событиях. (Возможно, такая календарная система уже есть; см. руководство по
calendar(1)
Прежде всего нужно предусмотреть место, где будет храниться календарь. Имеет смысл разместить его в файле с именем
calendar
/usr/you
$ cat calendar
Sep 30 день рождения мамы
Oct 1 обед с Джо, полдень
Oct 1 встреча в 16:00
$
Далее, необходимо уметь просматривать календарь, отыскивая определенную дату. Существует масса вариантов; мы остановимся на языке
awk
sed
egrep
calendar
mail
Наконец, вам придется научиться автоматически и безотказно просматривать календарь каждый день, скажем, рано утром. Это можно сделать с помощью команды
at
Если ограничить календарь таким форматом, в котором каждая строка начинается с названия месяца и числа (как это делает команда
date