
- •История создания 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 поддерживает функции, определенные пользователем:
function имя( список_аргументов) {
операторы
}
Это определение может появляться в любом месте, где возможен оператор "шаблон-действие". Список аргументов - это список имен переменных, разделенных запятыми. Внутри тела функции эти переменные ссылаются на действительные переменные при вызове функции. Между именем функции и левой круглой скобкой не должно быть пробела, иначе это будет означать конкатенацию.
Массив элементов просматривается при обращении, как и в Си. Функция при просмотре не может изменить значение скалярных аргументов. Внутри функции формальные параметры являются локальными переменными, но все другие переменные являются глобальными. У вас может быть любое количество формальных параметров, которые используются только как локальные переменные. Оператор return является необязательным, но если он отсутствует, возвращаемое значение будет неопределенным.
Комментарии
В программе awk могут присутствовать комментарии. Они начинаются с символа # и заканчиваются символом новой строки:
print x,y # это комментарий
Операторы обычно занимают одну строку. Несколько операторов могут располагаться на одной строке, тогда они должны разделяться точкой с запятой. Длинный оператор может располагаться на нескольких строках, причем каждая продолжаемая строка должна заканчиваться символом "\". Нельзя продолжить строку вида "....". Такое продолжение встречается редко, однако как только строка заканчивается запятой, операторы продолжаются автоматически. Примером этого служат операторы print и printf, и такое возможно после операторов "&&" и "||". Несколько операторов "шаблон-действие" могут появляться на одной строке, если они разделены точкой с запятой.
Вывод
Операторы print и printf являются простейшими конструкциями, которые генерируют вывод. Оператор print используется для образования просто вывода; printf - для форматируемого вывода. Подобно shell awk позволяет вам перенаправлять вывод в файл или в канал.
Оператор print
Оператор:
print expr1, rxpr2, ..., exprn
печатает строки каждого выражения, разделенные при помощи разделителей полей и следующими за ними разделителями записей.
Оператор:
является сокращенной формой оператора:
print $0
Чтобы напечатать пустую строку, введите:
print ""
Разделители вывода
Разделители полей выводного файла и разделители записей хранятся в строковых переменных OFS и ORS. Первоначально значение OFS устанавливается как один пробел и ORS - один символ новой строки, но эти значения могут быть изменены в любой момент времени. Например, следующая программа печатает первое и второе поле каждой записи, имеющее двоеточие между полями и два символа новой строки после второго поля.
BEGIN { OFS = ":"; ORS = "\n\n" }
{ print $1, $2 }
Обратите внимание, что :
{ print $1 $2 }
печатает первое и второе поле без разделителя полей вводного файла.
Оператор printf
Оператор printf, используемый в awk, подобен этому оператору в Си, за исключением того, что спецификатор * не поддерживается.
Общий формат оператора:
print format expr1, rxpr2, ..., exprn
где format - это строка, содержащая информацию, которая будет печататься, и какое преобразование будет выполняться над выражением.
Каждая спецификация начинается с символа "%", заканчивается буквой, которая определяет преобразование, и может включать: - - выравнивание по левому краю в поле; width - заполнить поле на заданную ширину; поля, начинающиеся с лидирующего нуля, должны быть заполнены нулями; .prec - указывает максимальную ширину строки или разряд справа от десятичной точки.
В табл.6 приведен список символов преобразования printf.
Таблица 6 Символы преобразования printf
Символ |
Вид печати выражения |
c |
Один символ |
d |
Десятичное число |
e |
[-]d.ddddddE[+-]dd |
f |
[-]ddd.dddddd |
g |
e или f преобразование с подавленем незначащих нулей |
o |
Беззнаковое восьмиричное число |
s |
Строка |
x |
Беззнаковое шестнадцатиричное число |
% |
Печать %; нет аргументов для преобразования |
Примеры оператора printf с соответтвующим выводом на той же строке.
printf "%d", 99/2 49
printf "%s", 99/2 4.950000e+01
printf "%f", 99/2 49.500000
printf "%6.2f", 99/2 49.50
printf "%g", 99/2 49.5
printf "%o", 99 143
printf "%06o", 99 000143
printf "%x", 99 63
printf "|%10s|", "January" | January|
printf "|%-10s|", "January" |January |
printf "|%.3s|", "January" |Jan|
printf "|%10.3s|", "January" | Jan|
printf "|%-10.3s|", "January" |Jan |
printf "%%" %
По умолчанию формат чисел выводного файла %.6g. Он может быть изменен, если вы зададите новое значение OFMT. OFMT также управляет преобразованием цифровых значений в строковые при конкатенации и создании массива индексов.
Вывод в файлы
В качестве стандартного вывода для печати можно использовать файлы. Для этого используются операторы изменения направления > и >>. Например, следующая программа вызывает печать из файла countries всех строк, в которых 3-е поле (население) больше, чем 100, в файл bigpop и все остальные строки в файл smallpop:
$3 > 100 { printf $1, $3 > "bigpop" }
$3 > 100 { printf $1, $3 > "smallpop" }
Обратите внимание, что имена файлов заключены в двойные кавычки; без кавычек bigpop и smallpop будут просто неустановленными переменными. Если имена выводных файлов создаются с помощью выражения, они должны быть заключены в круглые скобки:
$4 ~ /North America/ { print $1 > ("tmp" FILENAME) }
так как оператор > имеет более высокий приоритет, чем конкатенация. Без круглых скобок конкатенация tmp и FILENAME не будет производиться.
Примечание. Файлы в программе awk открываются один раз. Если файл открыт с помощью >>, его содержимое сохраняется и вывод дополняется в файл.
Вывод в канал
Вы можете направить печать в канал.
Оператор:
print | "командная_строка"
направляет вывод в "командную_строку". Хотя канал здесь показан как строковая переменная, заключенная в двойные кавычки, командная строка и имена файлов могут приходить из переменных и возвращать значения из функций.
Предположим, вы хотите создать список страна-население так, чтобы страны были отсортированы по алфавиту. Программа awk накапливает значение "количество населения" из 3-го поля для каждого названия страны из 4-го поля и вывод направляет в массив pop. Затем print название каждой страны и ее население направляет вывод команде sort:
BEGIN { FS "\t" }
{ pop [$4] += $3 }
END { for ( c in pop )
print c ":" pop[c] | "sort" }
В результате работы этой программы получим:
Africa:37
Asia:1765
Australia:14
North America:243
South America:142
Во всех этих операторах print, вызывающих перенаправление вывода, файлы или каналы идентифицируются с помощью имен (так, канал в данном примере называется "sort"), но они создаются и открываются один раз при запуске. Так что в последнем примере для всех "c" в "pop" открывается только один канал "sort".
Существует ограничение на число файлов, которые могут быть открыты одновременно. Оператор close (файл) закрывает файл или канал.
Когда открывается или закрывается файл, различные строки являются различными командами.
Ввод
Наиболее общим способом подачи ввода программе awk является указание в командной строке имен вводных файлов. Но существуют и другие способы. Они описываются в этом подразделе.