
287649
.pdf2.6. Написание Awk-скриптов
Для выполнения данной части лабораторной работы создайте текстовые файлы sport и сars, как описано в разд. 2.2. Ниже приведено содержимое указанных текстовых файлов.
Содержимое файла sport:
Jim |
Fost |
student |
11.10.87 5 |
football |
Mike |
Brown |
student |
12.09.86 6 |
football |
John |
Rodd |
student |
05.09.86 3 |
swimming |
Bryan |
Talbot |
lecturer |
04.07.75 10 |
basketball |
Nick |
Shaw |
student |
03.08.87 5 |
swimming |
Ann |
Brook |
lecturer |
08.04.79 6 |
swimming |
Jane |
Fell |
student |
14.05.83 2 |
volley-ball |
Содержимое файла cars:
BMW |
: Paul |
: Brown |
: 12389 |
BMW |
: Jane |
: Tod |
: 34567 |
Chrysler |
: Mike |
: Bell |
: 67890 |
Chevrolet |
: Ben |
: Walsh |
: 45634 |
Введите awk-команду awk '{print $1}' sport для вывода первого поля каждой записи файла sport.
Введите awk-команду awk '$1 == "Jim" {print}' sport для вывода всех полей для всех записей, начинающихся с имени «Jim».
Введите awk-команду awk '$1 == "Jim" {print $1,$6}' sport для вывода первого и последнего полей всех записей, начинающихся с имени «Jim».
Запустите ISPF-редактор при помощи команды oedit и создайте файл скрипта awk1, выполняющий задачи, указанные в вашем варианте (вариант получите у преподавателя).
Запуск на исполнение вашего скрипта выполняется по команде awk -f awk1 sport, если вы обрабатываете текстовый файл sport, либо по команде awk -f awk4 cars, если вы обрабатываете текстовый файл cars.
Обращайте внимание на регистр.
Создайте новый подкаталог и назовите его bin. Скопируйте в него все созданные программы с помощью следующих команд: mkdir bin и mv awk* bin.
21
2.7. Создание С-программ
Используя редактор oedit, наберите следующую C-программу и сохраните ее под именем hello.c. Программа имеет вид: #include <stdio.h> main() { printf(“Hello World \n”); }.
С помощью команды c89 hello.c откомпилируйте и скомпонуйте С-программу. Компилятором будут созданы дополнительные файлы с расширениями .o и .out, причем для последнего файла (исполняемого с расширением .out) биты разрешений должны быть установлены следующие: rwxr-xr-x. Запустите программу по команде a.out.
3. ТРЕБОВАНИЯ К ОТЧЕТУ
Отчет о выполнении лабораторной работы должен содержать ответы на контрольные вопросы, скрин-шоты результатов выполнения практических заданий, листинги скриптов в соответствии с полученным студентом вариантом.
Оформление отчета должно быть выполнено в соответствии с требованиями ГОСТ 7.32–2001 «Отчет о научно-исследователь- ской работе. Структура и правила оформления» и ГОСТ 7.1–2003 «Библиографическое описание документов».
4.ВАРИАНТЫ ЗАДАНИЙ
4.1.Варианты заданий для написания Shell-скриптов
Вариант 1. Скрипт «Работа с файлами домашнего каталога». Используя последовательность команд (скрипт) объедините
следующие задачи: вывод содержимого текущего рабочего каталога, сортировка результата по размеру и сохранение данного скрипта в файле mylist.
Вариант 2. Скрипт «Ввод пользователем нужной информации». Напишите скрипт dirlist2, который запрашивает имя дирек-
тории до тех пор, пока оно не будет введено. После этого выводит содержимое данной директории.
Вариант 3. Скрипт «Общение с пользователем».
22
Напишите скрипт, спрашивающий у пользователя его имя и возраст и генерирующий предложение на основании полученных данных. Назовите его hello и запустите.
По команде read считывается значение введенной переменной и присваивается ей. Команда echo может использоваться для вывода сообщения на экран.
Вариант 4. Скрипт «Вывод домашнего каталога».
Напишите скрипт dirlist, который запрашивает директорию для вывода. Если пользователь ничего не вводит, то скрипт выводит домашнюю директорию пользователя.
4.2. Варианты заданий для написания Awk-скриптов
Вариант 1. Напишите Awk-скрипт, который выполняет следующие задачи: для всех записей, начинающихся с «Jim», выполняет вывод первого и последнего полей и для всех записей, начинающихся с «Ann», выполняет вывод второго и третьего полей. В качестве входного файла укажите файл sport.
Вариант 2. Напишите Awk-скрипт, который выводит название каждого поля файла sport. Названия полей: «Name Surname Occupation Date of Birth Expert Sport».
Вариант 3. Напишите Awk-скрипт, который выполняет следующие задачи: подсчет количества человек, занимающихся футболом и плаванием, и вывод результатов. В качестве входного файла укажите файл sport.
Вариант 4. Напишите Awk-скрипт, который выполняет следующие задачи: использует символ «:» в качестве разделителя полей входного файла; осуществляет вывод первого и второго полей, разделенных символом «:», затем вывод второго, третьего и четвертого полей, разделенных символом «,». В качестве входного файла укажите файл cars.
Вариант 5. Напишите Awk-скрипт, который выполняет следующие задачи: использует символ «:» в качестве разделителя полей входного файла; осуществляет чтение всех записей, содержащих заглавную букву С, и вывод этих строк без последнего поля. В качестве входного файла укажите файл sport.
Вариант 6. Напишите Awk-скрипт, который выполняет следующие задачи: использует символ «:» в качестве разделителей
23
полей входного файла; осуществляет чтение всех записей, содержащих заглавную букву С, и вывод этих записей, далее — подсчет суммы по последним полям выведенных строк и вывод результата суммирования. В качестве входного файла укажите файл cars.
КОНТРОЛЬНЫЕ ВОПРОСЫ
1.Чем отличается рабочий каталог от домашнего каталога?
2.Какое название у корневого каталога?
3.Можно ли создать два каталога одной командой?
4.Как последовательно вывести содержимое файла на экран?
5.Как определить размер файла?
6.Что делает команда touch?
7.Является ли жесткая ссылка файлом?
8.Кто создает файл .sh history?
9.Каким образом используются переменные среды?
10.Сколько ID-процессов создается при выполнении конвейера команд?
11.Какой файл хранит параметры интерфейса пользовательской консоли?
12.Как узнать размер свободного пространства в смонтированной файловой системе?
13.Что такое shell-скрипт?
14.Какой командой можно вывести произвольную текстовую строку?
15.Для чего используется язык Awk?
16.Из каких частей состоит Awk-скрипт?
17.С какими типами файлов работает Awk-скрипт?
18.Будет ли Awk-скрипт корректно работать с текстовыми файлами Windows?
19.Как запустить Awk-скрипт?
24
ОТВЕТЫ К ВАРИАНТАМ ЗАДАНИЙ
Номер |
|
|
|
вари- |
Задание на написание скриптов |
Ответ (скрипт) |
|
анта |
|
|
|
|
|
|
|
|
Написание Shell-скриптов (см. разд. 4.1) |
|
|
|
Напишите скрипт mylist, который выполня- |
|
|
|
|
||
|
ет следующие действия: выводит содержи- |
ls -l | sort -k5; |
|
1 |
мое текущего рабочего каталога, сортирует |
touch mylist; ls -l |
|
|
результаты по размеру и сохраняет данный |
| sort -k5 > mylist |
|
|
скрипт в файле mylist |
|
|
|
|
|
|
|
Напишите скрипт dirlist2, который выпол- |
while test "$1" = |
|
|
няет следующие действия: запрашивает имя |
"" do echo Direc- |
|
2 |
директории до тех пор, пока оно не будет |
tory: read dir set |
|
|
введено. После этого выводит содержимое |
"$dir" done ls -l |
|
|
данной директории |
$dir |
|
|
|
||
|
|
|
|
|
Напишите скрипт, спрашивающий у поль- |
echo Please |
|
|
зователя его имя и возраст и генерирующий |
enter your |
|
|
предложение на основании полученных |
name:; read |
|
|
name; echo |
||
|
данных. Назовите его hello и запустите. |
||
3 |
Please enter |
||
По команде read считывается значение |
|||
|
your age: read |
||
|
введенной переменной. Команда echo |
||
|
age echo Hello, |
||
|
может использоваться для вывода |
||
|
$name. You are |
||
|
сообщения на экран |
$age years old |
|
|
|
|
|
|
Напишите скрипт dirlist, который выполня- |
echo Directory: |
|
|
ет следующие действия: запрашивает |
read dir if test -z |
|
4 |
директорию для вывода; если пользователь |
"$dir" then |
|
|
ничего не вводит, то выводит домашнюю |
dir=$HOME fi ls |
|
|
директорию пользователя |
-l $dir |
|
|
|
||
|
|
|
|
|
Написание Awk-скриптов (см. разд. 4.2) |
||
|
Напишите Awk-скрипт, который выполняет |
|
|
|
|
||
|
следующие действия: для всех записей, |
$1 == "Jim" |
|
|
начинающихся с «Jim», выводит первое |
||
|
{print $1,$6} $1 |
||
1 |
и последнее поле и для всех записей, начи- |
||
== "Ann" {print |
|||
|
нающихся с «Ann», выводит второе и |
||
|
$2,$3} |
||
|
третье поле. В качестве входного файла |
||
|
|
||
|
укажите файл sport |
|
|
|
|
|
|
|
|
25 |
|
Продолжение таблицы |
||
|
|
|
|
Номер |
|
|
|
вари- |
Задание на написание скриптов |
|
Ответ (скрипт) |
анта |
|
|
|
|
|
|
|
|
Написание Awk-скриптов (см. разд. 4.2) |
|
|
|
Напишите Awk-скрипт, который выводит |
|
BEGIN {print " |
|
|
||
|
|
Name Surname |
|
|
название каждого поля файла sport. Назва- |
|
|
2 |
|
Occupation Date |
|
ния полей: «Name Surname Occupation Date |
|
||
|
|
of Birth Expert |
|
|
of Birth Expert Sport» |
|
|
|
|
Sport"} {print} |
|
|
|
|
|
|
|
|
|
|
|
|
BEGIN {foot- |
|
|
|
count = _ swim- |
|
|
|
count = _} $6 == |
|
|
|
"football" {foot- |
|
|
|
count = foot- |
|
Напишите Awk-скрипт, который выполняет |
|
count + 1} $6 == |
|
|
"swimming" |
|
|
следующие действия: подсчитывает коли- |
|
|
3 |
|
{swimcount = |
|
чество человек, занимающихся футболом и |
|
||
|
|
swimcount + 1} |
|
|
|
|
|
|
плаванием, и выводит результаты |
|
END {print foot- |
|
|
|
|
|
|
|
count " people |
|
|
|
enjoy football." |
|
|
|
print swimcount " |
|
|
|
people enjoy |
|
|
|
swimming."} |
|
|
|
|
|
Напишите Awk-скрипт, который выполняет |
|
|
|
следующие действия: использует символ |
|
|
|
«:» в качестве разделителя полей входного |
|
BEGIN {FS = ":"} |
|
файла и выводит первое и второе поля, раз- |
|
|
4 |
|
{print $1 FS $2 ", |
|
деленные символом «:»; выводит второе, |
|
||
|
|
" $3 ", " $4} |
|
|
третье и четвертое поля, разделенные сим- |
|
|
|
|
|
|
|
волом «,». В качестве входного файла ука- |
|
|
|
жите файл cars |
|
|
|
|
|
|
|
Напишите Awk-скрипт, который выполняет |
|
|
|
следующие действия: использует символ |
|
BEGIN {FS = ":"} |
|
«:» в качестве разделителя полей входного |
|
|
5 |
|
/C/ {print $1 ":" |
|
файла, считывает все записи, содержащие |
|
||
|
|
$2 "," $3} |
|
|
заглавную букву С, и выводит эти строки |
|
|
|
|
|
|
|
без последнего поля |
|
|
|
|
|
|
26 |
|
|
|
|
Окончание таблицы |
||
|
|
|
|
Номер |
|
|
|
вари- |
Задание на написание скриптов |
|
Ответ (скрипт) |
анта |
|
|
|
|
|
|
|
|
Написание Awk-скриптов (см. разд. 4.2) |
|
|
|
|
|
|
|
Напишите Awk-скрипт, который выполняет |
|
BEGIN {FS = ":" |
|
следующие действия: использует символ |
|
|
|
|
total = _} /C/ |
|
|
«:» в качестве разделителей полей входного |
|
|
|
|
{amount = |
|
6 |
файла; считывает все записи, содержащие |
|
substr($4,1) total |
заглавную букву С, и выводит эти записи; |
|
= total + amount |
|
|
|
||
|
подсчитывает сумму по последним полям |
|
print $_} END |
|
выведенных строк и выводит результат |
|
{print "The total |
|
|
is $"total} |
|
|
суммирования |
|
|
|
|
|
|
|
|
|
|
ЛИТЕРАТУРА
z/OS UNIX System Service User’s Guide (SC28-1891),Tenth Edition, September 2009. — http://publibz.boulder.ibm.com/epubs/pdf/bpxza4a0.pdf
z/OS Unix System Services Command Reference, Eleventh Edition, September 2009. — http://publibz.boulder.ibm.com/epubs/pdf/bpxza5a0.pdf
27
ОГЛАВЛЕНИЕ |
|
ВВЕДЕНИЕ.................................................................................................. |
3 |
1. Теоретическая часть................................................................................. |
3 |
1.1. Основы z/OS UNIX............................................................................ |
3 |
1.2. Иерархическая файловая система HFS ............................................. |
6 |
1.3. Скриптовый язык Awk ...................................................................... |
8 |
1.4. Режимы доступа пользователей к z/OS UNIX .................................. |
9 |
2. Практическая часть ................................................................................ |
11 |
2.1. Запуск оболочки Shell системных сервисов UNIX ......................... |
11 |
2.2. Работа с файлами и каталогами....................................................... |
13 |
2.2.1. Создание и копирование файлов и каталогов .......................... |
13 |
2.2.2. Жесткие и символические ссылки............................................ |
14 |
2.2.3. Удаление файлов, каталогов и ссылок ..................................... |
15 |
2.2.4. Сортировка файлов ................................................................... |
16 |
2.3. Изучение основных команд оболочки Shell.................................... |
17 |
2.4. Настройка оболочки Shell................................................................ |
20 |
2.5. Написание Shell-скриптов ............................................................... |
20 |
2.6. Написание Awk-скриптов................................................................ |
21 |
2.7. Создание С-программ...................................................................... |
22 |
3. Требования к отчету............................................................................... |
22 |
4. Варианты заданий .................................................................................. |
22 |
4.1. Варианты заданий для написания Shell-скриптов........................... |
22 |
4.2. Варианты заданий для написания Awk-скриптов ........................... |
23 |
Контрольные вопросы ............................................................................... |
24 |
Ответы к вариантам заданий ..................................................................... |
25 |
Литература ................................................................................................. |
27 |
28