- •Министерство образования и науки Украины
 - •Практическое занятие №1
 - •1.1. Сокращенная запись двоичных чисел в восьмеричной и шестнадцатеричной системах счисления
 - •1.2. Преобразование восьмеричных и шестнадцатеричных чисел в двоичные
 - •1.3. Преобразование двоичных, восьмеричных и шестнадцатеричных чисел в десятичные
 - •1.4. Преобразование десятичных чисел в двоичные, восьмеричные и шестнадцатеричные
 - •2. Упражнения
 - •3. Содержание отчёта
 - •Практическое занятие №2
 - •1.1. Вход в систему
 - •1.2. Редактирование командной строки
 - •1.3. Память командных строк
 - •1.4. Переключение виртуальных консолей
 - •1.5. Изменение консольных шрифтов
 - •1.6. Основные команды
 - •Выполнение некоторых команд
 - •2. Команда просмотра содержимого каталогов -ls (LiSt) – выдает на экран перечень файлов и каталогов (по умолчанию из текущего каталога).
 - •Жесткая ссылка обозначает ся так же, как файл, на который она ссылается, счетчик ссылок при этом будет иметь значение больше 1.
 - •3. Команда создание новых каталогов - mkdir.
 - •5. Команда копирование файлов -cp (CoPy).
 - •6. Команда перемещение файлов - mv (MoVe).
 - •7. Команда удаление файлов - rm (ReMove).
 - •8. Команды просмотра содержимого файлов more и cat.
 - •Подстановочные символы
 - •1.7. Выход из системы
 - •2. Упражнения
 - •Используя справочную информацию из п.1.6 Основные команды, изучите работу рассмотренных команд с различными параметрами и опциями:
 - •1.2. Перенаправление ввода и вывода
 - •1.3. Перенаправление с добавлением
 - •1.4. Использование конвейера
 - •2. Упражнения
 - •3. Содержание отчёта
 - •Справочная информация
 - •Практическое занятие №4 Псевдонимы команд в ос qnx Цель – создание псевдонимов команд для облегчения работы в среде ос qnx
 - •1. Краткие теоретические сведения
 - •1.1. Управление связями файлов
 - •1.2. Жесткие связи
 - •1.3. Символические связи
 - •1.4. Права доступа к файлам
 - •1.5. Зависимости
 - •1.6. Изменение прав доступа
 - •2. Упражнения
 - •3. Содержание отчёта
 - •1.2. Сравнение файлов (команда diff)
 - •1.3. Подсчет числа слов, строк и байт в файле (команда wc)
 - •1.4. Потоковый редактор sed
 - •2. Упражнения
 - •/Usr/bin/grep
 - •/Usr/xpg4/bin/grep
 - •/Usr/xpg4/bin/grep
 - •Операнды
 - •/Usr/bin/grep
 - •/Usr/xpg4/bin/grep
 - •Использование
 - •Работа с большими файлами
 - •/Usr/bin/who
 - •/Usr/xpg4/bin/who
 - •Операнды
 - •1.1. Ввод текста
 - •1.2. Редактирование текста
 - •1.3. Сохранение файлов и выход из VI
 - •1.4. Редактирование еще одного файла
 - •1.5. Включение других файлов
 - •1.6. Выполнение команд Shell
 - •2. Упражнения
 - •3. Содержание отчёта
 - •Практическое занятие №7 Работа с текстовыми файлами Цель – знакомство с командами, работающими с текстовыми файлами (awk-интерпретатор скриптовый)
 - •1. Краткие теоретические сведения
 - •1.1. Язык awk
 - •1.2. Регулярные выражения
 - •Метасимволы, используемые в регулярных выражениях
 - •1.3. Действия
 - •1.4. Awk-переменные и выражения
 - •1.5. Использование операций
 - •1.6. Использование массивов
 - •1.7. Селекторы
 - •1.8. Использование операторов
 - •1.9. Ввод и вывод данных
 - •1.10. Встроенные функции
 - •2. Упражнения
 - •Структура файла query1
 - •Структура файла query2
 - •3. Содержание отчёта
 - •1.2. Граматика языка shell
 - •2. Упражнения
 - •3. Содержание отчёта
 - •Выполнить:
 - •2. Упражнения
 - •Примечание:
 - •3. Содержание отчёта
 - •1.1. Компоновка объектных модулей
 - •1.2. Отладка
 - •2. Упражнения
 - •Задание №1
 - •Задание №2
 - •Задание №3
 - •Задание №4
 - •Задание №5
 - •Задание №6
 - •Задание №13
 - •Задание №14
 - •Задание №15
 - •Задание №16
 - •Задание №17
 - •Практическое занятие №11
 - •2. Упражнения
 - •3. Содержание отчёта
 - •1.2. Создание каталога
 - •1.3. Биты режима для прав доступа
 - •1.4. Удаление каталога
 - •1.5. Создание жесткой связи
 - •1.6. Создание символической связи
 - •1.7. Чтение символической связи
 - •1.8. Переименование файла
 - •1.9. Удаление файла
 - •1.10. Обработка ошибок
 - •2. Упражнения
 - •3. Содержание отчёта
 - •1.2. Проверка возможностей управления работой и процессами в shell
 - •2. Упражнения
 - •3. Содержание отчёта
 - •1.3. Ошибки, связанные с именами файлов
 - •1.4. Доступ к файлу
 - •2. Упражнения
 - •3. Содержание отчёта
 - •Практическое занятие №15 Организация процессов вQnx
 - •1. Методические указания по выполнению практической работы
 - •1.1. Файл main.O
 - •1.2. Файл input.C
 - •1.3. Файл output.C
 - •1.4. Файл process.C
 - •1.5. Используемые функции
 - •1.6. Получение информации о процессах
 - •2. Упражнения
 - •1.2. Клиент
 - •1.3. Определение идентификаторов узла, процесса и канала (nd/pid/chid) нужного сервера
 - •1.4. Применение обмена сообщениями
 - •2. Упражнения
 - •3. Содержание отчёта
 - •Практическое занятие №17 Организация потоков в qnx
 - •1. Краткие теоретические сведения
 - •1.1. Запуск потока
 - •1.2. Администрирование атрибутов потока
 - •Текст программы
 - •Результаты
 - •1.2. Текст программы
 - •1.3. Последовательность действий
 - •1.4. Результаты
 - •2. Упражнения
 - •3. Содержание отчёта
 
1.8. Использование операторов
Примеры
awk ' $4~/40/ {if($3<=1980) {print("Фамилия: " $1 )
M["40"]++}}
$4~/50/ {M["50"]++}
END {for(i in M)
{print(" i =" i " M[" i "]=" M[i])}} ' f-awk
Результат:
Фамилия: Петров
Фамилия: Сидоров
i =40 M[40]=2
i =50 M[50]=1
2) awk ' BEGIN {ORS = " "}
{ for(k=NF; k>0; --k) {print $k}
{print RS}
} ' f-awk | sed 's/^ //'
Результат:
50 1980 И.И. Иванов
40 1979 А.В. Петров
40 1979 С.К. Сидоров
60 1970 И.Х. Хведоров
Здесь, кроме изменения очередности полей в строке на противоположное (что делает цикл "for"), предварительно устанавливается выходной разделитель - пробел и весь результат предварительно выдается в одну строку, поэтому после обработки каждой строки выдается команда "print RS" для перевода выходной строки. Редактор "sed" подключен через конвейер, чтобы убрать возможные пробелы в начале строки. Существенная деталь. Если запустить лишь базовую структуру
awk '{ for(k=NF; k>0; --k) {print $k}}' f-awk
то все поля исходной таблицы с изменениями порядка внутри прежних строк получим вытянутыми в один столбец переводом строки:
50
1980
И.И.
Иванов
40
1979
А.В.
Петров
40
1979
С.К.
Сидоров
60
1970
И.Х.
Хведоров
Однако, если поставим ";" сразу после условия, т.е. сделаем пустое тело цикла, за пределы которого вынесен "print $k"
awk '{ for(k=NF; k>0; --k); {print $k}}' f-awk
то получим исходную таблицу
Иванов И.И. 1980 50
Петров А.В. 1979 40
Сидоров С.К. 1979 40
Хведоров И.Х. 1970 60
поскольку "$k" после выхода из цикла будет иметь значение "0", а "$0" - соответсвует всей строке в качестве значения(!), то "print $k" будет после каждого цикла печатать полные строки.
1.9. Ввод и вывод данных
В общем случае в команде awk может быть указано несколько файлов. Напомним форматы вызова команды:
awk [-Fc] 'prog.awk' [file ...]
awk [-Fc] -f prog.awk [file ...]
Файлы обрабатываются последовательно в указанном порядке. Это можно использовать для "настройки" awk команды при обработке последующих файлов.
Пусть файл "f0" имеет вид:
60 Сидоров
А файл awk-программы "prim.awk" имеет вид:
FILENAME == "f0" { # если просматривается файл "f0"
w1 = $2 # присваиваются значения переменным
w2 = $1 # w1 - Сидоров, w2 - 60
}
$1 == w1 { print ("фамилия: "$1)} # означенные переменные
$4 == w2 { print ("годы: " $4)} # используются в
# селекторах
Тогда при вызове команды
awk -f prim.awk f0 f-awk
Результат:
фамилия: Сидоров
годы: 60
То есть второе поле файла "f0" дает значение переменной "w1", а первое - "w2". Эти переменные используются в селекторах при обработке файла "f-awk".
Изменим программу в файле "f-awk":
FILENAME == "f0" {
w1 = $2
w2 = $1
next
}
{ print ("фамилия: "$1); next}
$4 == w2 { print ("годы: " $4)}
Результат:
фамилия: Иванов
фамилия: Петров
фамилия: Сидоров
фамилия: Хведоров
Если исключить первый оператор "next", то в выходном файле появится дополнительно первая строка:
фамилия: 60
поскольку выбирается снова первое поле в певом файле ("f0"). Если исключить и второй "next", то в выходном файле появится дополнительно последняя строка:
годы: 60
которая ранее не выводилась, так как в предшествующий оператор " { print ("фамилия: "$1)}" заканчивал работу на ПОСЛЕДНЕЙ строке файла "f-awk", поэтому "next" пропускал последующую командную строку
$4 == w2 { print ("годы: " $4)}
И еще одна модификация в связи с вводом данных с терминала. Вызов команды будет:
awk -f prim.awk f0 f-awk
А файл "prim.awk" примет вид:
BEGIN { print ("Введите годы и фамилию: ")}
FILENAME == "-" {
w1 = $2
w2 = $1
next
}
$1 == w1 { print ("фамилия: "$1); next}
$4 == w2 { print ("годы: " $4)}
