65839

ОСНОВЫ РАБОТЫ С ТЕКСТОВЫМ РЕДАКТОРОМ AWK И ЯЗЫКОМ ПРОГРАММИРОВАНИЯ PERL

Лабораторная работа

Информатика, кибернетика и программирование

Цель работы — изучение возможностей, предоставляемых интерактивным текстовым редактором AWK из состава ОС UNIX, а также ознакомление с языком программирования Perl. Использованные теоретические сведения В ходе выполнения лабораторной работы были использованы теоретические...

Русский

2014-08-09

38.48 KB

2 чел.

Министерство образования и науки Российской Федерации

Санкт-Петербургский государственный политехнический университет

Факультет технической кибернетики

Кафедра «Информационная безопасность компьютерных систем»

ОТЧЕТ

по лабораторной работе №2

«ОСНОВЫ РАБОТЫ С ТЕКСТОВЫМ РЕДАКТОРОМ AWK И ЯЗЫКОМ ПРОГРАММИРОВАНИЯ PERL»

по курсу «Операционные системы»

Выполнил

студент гр. 2088/4    А.А.Чернышев

                           <подпись>

Руководитель     А.С. Коноплев

                           <подпись>

Санкт-Петербург

2011

  1.  Формулировка задания

Цель работы — изучение возможностей, предоставляемых интерактивным текстовым редактором AWK из состава ОС UNIX, а также ознакомление с языком программирования Perl.

  1.  Использованные теоретические сведения

В ходе выполнения лабораторной работы были использованы теоретические сведения из выданного методического пособия 02.pdf, а так же множество сведений взятых из различных интернет-ресурсов.

3. Результаты работы

3.1. Выполнение индивидуального задания

1) Разработать Perl скрипт для анализа готового файла журнала аудита (формат файла приведен в примере).

Скрипт должен выполнять следующие действия:

  1.  сгруппировывать события по дате;
  2.  выводить статистику событий в журнале, а именно:
  3.  количество событий от разных пользователей
  4.  количество событий в зависимости от типа события
  5.  количество событий по типу read;
  6.  удалять строки, содержащие определенную дату события, которая задается переменной в скрипте;
  7.  выполнять проверку упорядоченности последовательности записей по меткам времени и их сортировку.

Perl-script:

#!/usr/bin/perl

open(LOG, "<$ARGV[0]") || die "File not found!";

@log = <>;

close(LOG);

@logdate = sort @log;

foreach $line (@logdate) {

       $line =~ s/\n//g;

       ($date, $time, $user, $type, $param) = split '\t', $line;

       $dd{$date} = $dd{$date}.$line."\n";

$tp{$type}++; #= $tp{$type}.$line."\n";

       $us{$user}++;

       $lon++ if $type eq "read";

}

print "\n\t\t=============Days: ============\n";

while (($date, $line) = each(%dd)) {

   print "\t\t-----For the $date: ------\n\t$line";

}

print "\n\t\t=============Events: =============\n";

while (($type, $n) = each(%tp)) {

   print "\tNumber of $type - $n\n";

}

print "\n\t\t=============Users: =============\n";

while (($u, $n) = each(%us)) {

   print "\tNumber of $u s events - $n\n";

}

print "\n\t\t=============Reads: =============\n   \tNumber of reads: $lon\n";

print "\n\t\t======Without 13.10.2002: =======\n";

foreach $line (@logdate){  

       $line =~ s/\n//g;

       ($date, $time, $user, $type, $param) = split '\t', $line;

if ($date != "13.10.2002"){ print "\t$line\n\n";}

}

2) Проделать вышеприведенное задание с помощью редактора AWK.

BEGIN{ FS = "\t"}

{all_records[NR] = $0; N++;}

END {

print("\n\t\t=============Days: ============\n\n");

for (i = 1; i <= N; i++)

{

for (j = 1; j < N; j++)

{

 if (all_records[j] > all_records[j + 1])

 {

  t = all_records[j];

  all_records[j] = all_records[j + 1];

  all_records[j + 1] = t;

 }

}

}

for (i = 1; i <= N; i++)

{

 

 ni++;

 sorted_records[ni] = all_records[i];

 prev = all_records[i];

 print all_records[i];

 split (all_records[i], a); # разделение строки на поля

 days[a[1]]++;

 if (a[1] != prev_date) # если дата != предыдущей

 {

  prev_date = a[1];

 }

 

}

for (i = 1; i <= ni; i++)

{

for (j = 1; j < ni; j++)

{

 split(sorted_records[j], a1); # массив a1 отвечает да j-ую строку

 split(sorted_records[j + 1], a2); # массив a2 отвечает да (j+1)-ую строку

 if (a1[4] > a2[4])

 {

  t = sorted_records[j];

  sorted_records[j] = sorted_records[j + 1];

  sorted_records[j + 1] = t;

 }

}

}

prev = "";

for (i = 1; i <= ni; i++)

{

split(sorted_records[i], a);

 users[a[3]]++; # подсчёт событий по пользователям - 3е поле

 if (a[4] == "logout") logout++; # подсчёт logout

if (a[4] == "login") login++;

if (a[4] == "open") open++;

if (a[4] == "read") read++;

if (a[4] == "write") write++;

if (a[4] == "exec") exec++;

}

print("\n\t\t=============Events: =============\n");

print "Number of logouts: " logout; # вывод количества событий типа logout

print "Number of logins: " login;

print "Number of open: " open;

print "Number of read: " read;

print "Number of write: " write;

print "Number of exec: " exec;

print "\n\t\t=============Users: =============\n"

for (i in users) print i ":\t " users[i]; # вывод количества событий

#пользователя

print "\n\t\t=============Reads: =============\n"

print "Number of read: " read; # вывод количества событий

#пользователя

print "\n\t\t====Days without 13.10.2002: ====\n"

for (i = 1; i <= N; i++)

{

for (j = 1; j < N; j++)

{

 if (all_records[j] > all_records[j + 1])

 {

  t = all_records[j];

  all_records[j] = all_records[j + 1];

  all_records[j + 1] = t;

 }

}

}

for (i = 1; i <= N; i++)

{

 

 ni++;

 sorted_records[ni] = all_records[i];

 split (all_records[i], a); # разделение строки на поля

 days[a[1]]++;

 if (a[1] != 13.10.2002)

 {

  print "\t" a[1] "\t" a[2] "\t" a[3] "\t" a[5];

 }

 

}

}

3) Используя скриптовый язык Perl, разработать программу, которая осуществляет просмотр текущего каталога и выводит на экран его содержимое группами в порядке возрастания

#!/usr/bin/perl

while($file = <*>) {   

$nlink = (stat($file))[3];  

    

$group{$nlink} .= "\t$file\n";

}

for $key (sort {$a <=> $b} keys %group) {

print "$key link(s):\n$group{$key}\n";

}

3.2. Ответы на контрольные вопросы

Для каких строк выполняется действие, если в шаблоне указывается одновременно два шаблона?

Какие управляющие конструкции доступны при программировании в AWK?

Язык AWK предоставляет пользователю следующие управляющие конструкции:

Ifelse, while, for. В принципе данные операторы аналогичны тем, что применяются в языке С. Их вид:

If (условие) оператор1 else оператор2

While (условие) оператор

For (выражение1; условие; выражение 2) оператор

Какие операторы ввода/вывода есть в Perl?

В Perl существует несколько операторов ввода-вывода. Первый это скобки из символа '`' - акцента. Строка в этих скобках воспринимается как системная команда, и результат ее действия возвращается как "псевдо" литерал. В скалярном контексте, это строка, содержащая весь результат, а в списковом - список, элементы которого - строки результата. Статус выполненной команды хранится в переменной $?.

Следующая команда ввода вывода выглядит как '<файл>'. Вычисление <файл> приводит к чтению строки из файла. Обратите внимание, что 'файл' здесь не имя файла, а указатель файла, который создается функцией open(). В скалярном контексте читается одна строка вместе с символом '\n' - перевода строки, а в списковом весь файл читается в список, элементы которого суть строки файла. В

случае обнаружения конца файла результат оператора не определен ивоспринимается как false.  Если не указана переменная результата, то по умолчанию это $_. Указатель файла по умолчанию STDIN - стандартный ввод.

Почему в Perl не существует типов «строка» или «число» или «файл»?

Perl – контекстно зависимый полиморфный язык для работы с текстами.

  1.  Выводы

В ходе выполнения лабораторной работы были изучены основы работы с текстовым редактором AWK и языком программирования PERL.


 

А также другие работы, которые могут Вас заинтересовать

71357. Основи системного адміністрування ОС FreeBSD Unix 1.55 MB
  Завдання на роботу Відповідно до варіанту: створити облікові записи груп користувачів; створити облікові записи користувачів; додати облікові записи користувачів в необхідні групи, символ «+» означає приналежність користувача групі; створити каталоги і встановити необхідні права доступу...
71358. Установка і початкове налаштування ОС FreeBSD Unix 8.71 MB
  Контрольні питання Визначте основні можливості операційної системи FreeBSD Unix. Які функції виконує менеджер завантаження FreeBSD? Вкажіть особливості виділення дискового простору для FreeBSD Unix. Яким чином ядро системи іменує IDE диски?
71359. Розміщення графіки на Web-сторінці 228 KB
  Цей необов’язковий елемент визначає текст, який буде відображений браузером, що не підтримуює відображення графіки або з відключеною підтримкою зображень. Звичайно, це короткий опис зображення, який користувач міг би, чи зможе побачити на екрані.
71360. Работа с растровыми изображениями в Corel Draw 9.0 3.02 MB
  Для включения растровых изображений в CorelDRW используется команда Импорт в меню Файл. Для выделения части растрового изображения при импортировании: выберите команду Импорт в меню Файл; в открывшемся диалоговом окне в поле расположенном справа от поля Тип файла выберите команду Обрезка...
71361. Специальные эффекты в Corel Draw 9.0 1.1 MB
  На панели атрибутов есть кнопки позволяющие задавать режим редактирования оболочки: 1. Возможны четыре способа деформации объекта в результате применения эффекта Огибающая список панели атрибутов: 1. для получения таких изображений воспользуйтесь кнопками панели атрибутов инструмента...
71362. Работа с текстом в CorelDraw 9.0 493.5 KB
  В CorelDRW существует два типа текста: фигурный и простой. Выбор типа текста зависит от того что вы с ним будете делать. Если к нему будут применяться художественные спецэффекты выбирайте фигурный текст. Для изменения всего текста необходимо выделить его инструментом Выбор.
71363. CorelDraw 11.0 Знакомство с CorelDRAW 8.41 MB
  Выделите последовательно каждый объект инструментом Указатель и измените цвета контуров и заливку выделенных объектов используя левую и правую кнопки мыши и цветовую палитру в правой части экрана. С помощью инструмента Кривая нарисуйте кривую удерживая левую кнопку мыши.
71364. Corel Draw 9.0 Преобразование формы объектов. Специальные эффекты 357.5 KB
  Инструмент Форма выделяет контур объекта и представляет его как совокупность отрезков прямых и кривых линий соединенных опорными точками узлами. Перемещение узлов меняет форму объекта воспользуйтесь контекстным меню Преобразовать в кривые.