
- •История создания unix систем. Мультиплатформенность. Пперечень реализаций ос и в чем их отличие.
- •Возникновение и первая редакция ос unix
- •Исследовательский unix
- •Первый перенос ос unix
- •Седьмая редакция
- •Возникновение группы университета г. Беркли (bsd)
- •Unix System III и первые коммерческие версии системы
- •Основные понятия многопользовательской ос
- •Пользователь
- •Интерфейс пользователя
- •Привилегированный пользователь
- •Программы
- •Команды
- •Процессы
- •Перенаправление ввода/вывода
- •Основные сведения для пользователей Unix
- •Терминал
- •Состав программного обеспечения на примере System V версии 4.0
- •Базовая операционная система
- •Дополнительные пакеты программ
- •Структура ядра операционной системы и функции ядра операционной системы Ядро ос unix
- •Общая организация традиционного ядра ос unix
- •Функции операционной системы
- •Предполагаемая аппаратная среда
- •Прерывания и особые ситуации
- •Уровни прерывания процессора
- •Распределение памяти
- •Структура системы
- •Среда выполнения процессов
- •Специальные символы shell-переменных
- •Специальные символы shell-операторов
- •Команды ос unix
- •Регистрационный каталог" пользователя
- •Общее файловое дерево
- •Первый слой файловой системы
- •Второй слой
- •Символические каналы связи
- •Имя пути
- •Полное имя пути
- •Родственное имя пути
- •Правила именования справочников и файлов
- •Дополнительная информация по файловой системе
- •Перечень специальных символов
- •Минимальный набор команд
- •Организация справочника/каталога
- •Команда mkdir - создать справочник/каталог
- •Команда ls - напечатать содержимое справочника/каталога
- •Часто используемые ключи команды ls
- •Команда cd - изменить текущий справочник
- •Команда rmdir - удалить справочник
- •Доступ к файлу и работа с ним
- •Основные команды
- •Команды cat, pg, pr - распечатать содержимое файла
- •Команда cat
- •Команда pg
- •Команда pr
- •Команда cp - сделать копию файла
- •Команда mv - переименование файла
- •Команда rm - удалить файл
- •Команда wc - подсчет строк, слов и символов
- •Команда chmod - изменить статус файла
- •Как определить права
- •Как изменить существующие права
- •Альтернативный метод
- •Дополнительные команды
- •Команда diff
- •Команда grep
- •Команда sort
- •Режимы редактора
- •Создание текста в режиме Append
- •Выход из режима Append
- •Редактирование текста в командном режиме
- •Перемещение курсора
- •Удаление текста
- •Добавление текста
- •Команда перемещения: - (знак минус)
- •Позиционирование слов
- •Позиционирование в окне
- •Позиционирование курсора на неотображаемом тексте
- •Прокрутка текста
- •Удаление текста
- •Удаление текста в режиме ввода текста
- •Отменить последнюю команду
- •Команды удаления в командном режиме
- •Удаление слов
- •Удаление строк
- •Удаление текста после курсора
- •Модификация текста
- •Замена текста
- •Подстановка текста
- •Изменение текста
- •Извлечение и присоединение текста
- •Перемещение текста
- •Перемещение букв
- •Копирование текста
- •Специальные команды
- •Повторить последнюю команду
- •Объединение строк
- •Очистить окно и восстановить текст
- •Заменить нижний регистр на верхний и vice versa
- •Использование команд построчного редактора
- •Временный возврат к shell
- •Запись текста в новый файл
- •Переход к указанной строке
- •Удалить остаток буфера
- •Добавить файл в буфер
- •Провести глобальные изменения
- •Специальные опции для VI
- •Восстановление потерянного файла
- •Редактирование нескольких файлов
- •Просмотр файла
- •Интерпретатор shell последовательность действий интерпретатора shell
- •Специальные символы shell-переменных
- •Специальные символы shell-операторов
- •Встроенные операторы языка shell
- •Команды System V Bourne Shell
- •Дополнительные команды System V.2
- •Общая характеристика командных языков
- •Базовые возможности семейства командных интерпретаторов
- •1. Синтаксические
- •Связь ос unix с другими компьютерными станциями
- •Печать форматированного файла
- •Простые шаблоны
- •Простые действия
- •Встроенные переменные
- •Определенные пользователем переменные
- •Функции
- •Примеры некоторых полезных программ
- •Сообщения об ошибках
- •Шаблоны
- •Шаблоны begin и end
- •Комбинация шаблонов
- •Область шаблона
- •Поле переменных
- •Операторы управления потоком
- •Массивы
- •Функции, определенные пользователем
- •Комментарии
- •Файлы и каналы
- •Разделители ввода
- •Использование awk с другими командами и с shell
- •Функция system
- •Взаимодействие с shell
- •Примеры использования
- •Генерирование отчетов
- •Дополнительные примеры Частота использования слов
- •Накопление
- •Случайный выбор
- •Возможности shell
- •10.27.1. Ограничения
- •Запуск и остановка системы
Определенные пользователем переменные
awk позволяет определять пользователям собственные переменные, которые можно использовать для хранения данных, выполнения арифметических действий. Для иллюстрации, подсчитаем общее количество населения и среднее значение из файла countries:
{sum = sum + $3}
END {print "Общее количество населения", sum, "млн"
{print "Среднее количество населения", NR,
"стран", sum/NR}
Первым действием является накопление значений из третьего поля каждой строки; второе действие, выполняемое после последнего ввода, - напечатать сумму и среднее значение:
Общее количество населения 2201 млн
Среднее количество населения
10 стран 220.1
Функции
Встроенные функции awk управляют арифметикой и операциями над строками. Например, функция string заменяет одну строку на другую. awk также позволяет вам определить собственные функции
Примеры некоторых полезных программ
awk может использоваться для написания больших программ некоторой сложности. В нее могут входить некоторые короткие программы, которые для вас являются полезными и поучительными. Приведем некоторые из них.
Напечатать последнее поле каждой вводной строки:
{print $NF}
Напечатать 10-ю вводную строку:
NF == 10
Напечатать последнюю вводную строку:
{line = $0}
END {print line}
Напечатать строки, которые не имеют 4-го поля:
NF != 4 {print $0, "не имеют 4-го поля" }
Напечатать вводные строки, которые имеют более 4-х полей:
NF > 4
Напечатать последние поля вводных строк, начиная с 5-го:
$NF > 4
Напечатать общее число вводных строк:
END {print NR}
Напечатать обшее число полей:
{nf = nf+NF}
END {print nf}
Напечатать общее число символов вводного файла:
{nc = nc + length($0)}
END {print nc + NR}
Напечатать общее число строк, которые содержат строку "Asia":
/Asia/ {nlines++}
END {print nlines}
(nlines++ имеет тот же эффект, что и nlines = nlines+1).
Сообщения об ошибках
Если вы сделаете ошибку в программе awk, то получите сообщение об ошибке. Например, если вы попытаетесь запустить программу:
$3 < 200 { print ($1}
то получите сообщение об ошибке:
awk: syntax error at source line 1
contex is
$3 < 200 {print >>>$1}<<<
awk: illegal statement at source line 1
1 extra (
Некоторые ошибки могут быть обнаружены во время работы программы. Например, если вы попытаетесь поделить на 0 (ноль), то awk остановит обработку и распечатает номер записи вводного файла (NR) и номер строки в программе
Шаблоны
В выражении шаблон-действие, шаблон служит для выбора записей, для которых выполняется соответствующее действие.
Шаблоны begin и end
BEGIN используется для получения управления перед считыванием первой вводной строки, так что любое действие для шаблона BEGIN выполняется один раз до того, как команда awk начинает считывать первую запись. END используется для получения управления после считывания последней вводной строки.
Следующая awk-программа использует BEGIN для установки в качестве разделителя символа табуляции (\t) и создания заголовков в выводном файле. Поле-разделитель хранится во встроенной переменной FS. Хотя FS может быть восстановлено в любом месте, благоразумнее поместить в секции BEGIN, до того как вводной файл начнет считываться. Второй printf в программе выполняется для каждой вводной строки и формирует выводной файл в виде таблицы, где вся информация располагается по колонкам с заголовками. END печатает результат. (Обратите внимание, что длинная строка может быть продолжена на другой строке после запятой).
BEGIN { FS = "\t"
printf "%10s %6s %5s %s\n",
"COUNTRY", "AREA", "POP", "CONTINENT" }
printf "%10s %6s %5s %s\n", $1, $2, $3, $4
area = area + $2; pop = pop + $3}
END {printf "\n%10s %6d %5d\n", "TOTAL", area, pop }
Если в качестве вводного взять файл countries, то получим следующий результат:
COUNTRY AREA POP CONTINENT
USSR 8650 262 Asia
Canada 3852 24 North America
China 3692 866 Asia
USA 3615 219 North America
Brazil 3286 116 South America
Australia 2968 14 Australia
India 1269 637 Asia
Argentina 1072 26 South America
Sudan 968 19 Africa
Algeria 920 18 Africa
TOTAL 30292 2201
Выражения отношения
В качестве шаблона может использоваться любое выражение, вызывающее сравнение между строками символов или цифр. awk имеет 6 операторов сравнения и два регулярных выражения ~ и !~. В табл. 1 перечислены все операторы и их значение.
Таблица 1 Значения операторов
Оператор |
Значение |
< |
Меньше чем |
<= |
Меньше или равно |
== |
Равно |
!= |
Не равно |
>= |
Больше или равно |
> |
Больше чем |
~ |
Входит |
!~ |
Не входит |
При сравнении, если оба операнда являются цифровыми, то проводится цифровое сравнение; в противном случае - строчное. Например, шаблон:
$3 > 100
выбирает строки в которых третье поле больше 100, а программа:
$1 >= "S"
выбирает строки, которые начинаются с буквы S по букву Z:
USSR 8650 262 Asia
USA 3615 219 North America
SUDAN 986 19 Africa
При отсутствии любой другой информации awk трактует поля как строки, так что программа:
$1 == $4
сравнивает 1-е и 4-е поля как строки символов и для файла countries получим следующий результат:
Australia 2968 14 Australia
Регулярные выражения
awk обеспечивает более мощные шаблоны для поиска строки символов, чем сравнение. Такие шаблоны называются регулярными выражениями. Простейшим регулярным выражением является строка символов, обрамленная знаками "/". Например:
/Asia/
Эта программа печатает все записи, которые содержат подстроку Asia (запись, содержащая Asia как часть длинной строки, подобной Asian или Pan-Asiatic, также печатается).
Чтобы ограничить поиск только для специального поля, вы можете использовать операторы ~(входит) и !~(не входит). Программа:
$4 ~ /Asia/ { print $1 }
печатает первое поле всех тех строк, в которых четвертое поле - Asia, в то время как программа:
$4 !~ /Asia/ { print $1 }
печатает первое поле всех тех строк, в которых четвертое поле - не Asia.
В регулярном выражении могут использоваться метасимволы:
\, ^, $, ., [, ], *, ?, (, ), |
которые подобны метасимволам, используемым в shell. Например, метасимволы "^" и "$" осуществляют поиск соответственно начала и конца строки, а метасимвол "." ищет одиночный символ. Например:
/^.$/
просматривает все записи для поиска записи, состоящей из одного символа.
Если группа символов заключена в квадратные скобки, то это означает поиск одного символа из этой группы. Например, /[ABC]/ - осуществляет поиск либо символа "A", либо "B", либо "C". Границы букв или цифр могут быть обозначены внутри квадратных скобок:
/[a-zA-Z]/
Если первым символом после "[" является символ "^", то это означает: любой символ, не входящий в набор. Например:
/[^a-zA-Z]/
означает поиск любого символа, кроме буквы.
Символ "+" означает "один или больше". Например, программа:
$2 !~ /^[0-9]+$/
печатает все записи, в которых второе поле не является строкой из одной или более цифр. (^ - начало строки, [0-9]+ - одна или более цифр, $ -конец строки).
Круглые скобки используются для группирования символов, а символ | для указания альтернативы. Программа:
/(apple|cherry) (pie|tart)/
осуществляет поиск строк, содержащих одну из 4-х подстрок:
apple pie
apple tart
cherry pie
cherry tart
Чтобы отменить специальное значение метасимвола, поставьте знак "\" перед ним. Например:
/b\$/
печатает все строки, содержащие символ "b" и следующий за ним знак "$".
В дополнение к распознаваемым метасимволам, awk распознает следующие последовательности языка программирования Си внутри регулярных выражений и строк:
\b - возврат \f - перевод формата \n - новая строка \r - возврат каретки \t - табуляция \ddd - восьмиричное значение \" - кавычки \c - с
Например, чтобы напечатать все строки, содержащие табуляцию, воспользуйтесь программой:
/\t/
awk интерпретирует любую строку или переменную справа от символа "~" или "!~" как регулярное выражение. Например, мы можем записать программу:
$2 !~ /^[0-9]+$/
как
BEGIN { digits = "^[0-9]+&" }
$2 !~ digits
Предположим, что нужно найти строку символов, подобную ^[0-9]+$. Если строка "^[0-9]+$" используется как регулярное выражение, появляются дополнительные знаки "\", которые защищают регулярное выражение. Это связано с тем, что первый уровень знаков "\" удаляется при синтаксическом анализе строки. Первый уровень "\" перед символом возвращает его специальное значение в регулярном выражении, второй нужен, чтобы защитить его в строке.
Например, нужно найти строки, содержащие "b" и следующий за ним знак "$". Регулярное выражение для этого шаблона:
b\$
Чтобы создать строку для представления этого регулярного выражения, необходимо добавить еще один символ "\":
"b\\$"
Следующие регулярные выражения попарно эквивалентны:
x ~ "b\\$" x ~ /b\$/
x ~ "b\$" x ~ /b$/
x ~ "b$" x ~ /b$/
x ~ "\\t" x ~ /\t/
Регулярные выражения и подстроки, поиск которых они осуществляют, приведены в табл. 2.
Унарные операции *, +, ? имеют наивысший приоритет, затем конкатенация и затем альтернативный выбор.
Таблица 2 Регулярные выражения
Выражение |
Действие |
с |
Любой, отличный от "с" мета-символ |
\с |
Символ "с" |
^ |
Начало строки |
$ |
Конец строки |
. |
Любой символ, кроме новой строки |
[s] |
Любой символ из набора "s" |
[^s] |
Любой символ, не входящий в набор "s" |
r* |
Ноль или больше |
r+ |
Один или больше |
r? |
Ноль или один |
(r) |
r |
r1r2 |
Соединить r1 и r2 |
r1|r2 |
r1 или r2 |