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.


 

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

72014. Додавання двоцифрових чисел без переходу через десяток виду 34+52. Розв’язування задач 46.5 KB
  Мета: ознайомити учнів із загальним випадком додавання двоцифрових чисел без переходу через розряд; формувати вміння застосовувати цей прийом для розв’язування задач; розвивати математичне мовлення і мислення; активізувати пам’ять; виховувати наполегливість працьовитість любов...
72015. Розв’язування прикладів і задач на вивчені арифметичні дії 82 KB
  Мета. Закріпити навички додавання і віднімання в межах 10, навички розв’язування задач. Розвивати швидкі та точні обчислювальні навички; розвивати логічне мислення, кругозір учнів, інтерес до уроків математики шляхом поєднання математичного матеріалу з казковим.
72016. Узагальнення і систематизація знань з теми «Натуральні числа 1 – 10 і число 0» 37.5 KB
  Закріпити узагальнити і систематизувати вивчений матеріал; перевірити знання учнями чисел першого десятка і удосконалювати вміння та навички додавання і віднімати у межах 10 розв’язувати задачі і удосконалювати навички письма вивчених цифр...
72017. Число і цифра 8. Урок-подорож до Країни Чисел і Цифр 45 KB
  Мета: ознайомити дітей з числом 8, його утворенням і записом, вчити групувати предмети, сприймати число 8; закріплювати нумерацію чисел у межах 8; вміння розрізняти цифри і числа; сприяти розвитку логічного мовлення, уваги та уяви, виховувати інтерес до цікавої математики.
72018. Повторення складу числа 10. Складання прикладів за малюнками предметів та монет. Розпізнавання геометричних фігур 29 KB
  Будемо допомагати героям виконувати різні завдання. Діти отже послухайте які ж завдання нашого уроку: сьогодні ми повторимо склад числа 10; формуватимемо навички складати й розв’язувати приклади на додавання за малюнками предметів та монет; розпізнаватимем геометричні фігури...
72019. Цикл нестандартних уроків з використанням мультімедійних технологій. Математика, 1 клас 240.5 KB
  Робота вчителя початкових класів дуже складна та відповідальна, і складність її полягає у тому, що необхідно викликати в учнів інтерес до знань, не згасити цей вогник допитливості, навчити кожного з них вчитися, запевнити у своїх силах.
72020. ВПРАВИ ЗАДАЧІ І НА ЗАСВОЄННЯ ТАБЛИЦЬ ДОДДВАННЯ І ВІДНІМАННЯ ЧИСЛА 3. РОЗ’ЯЗУВАННЯ ЗАДАЧ НА ЗНАХОДЖЕННЯ СУМИ. ВИМІРЮВАННЯ ДОВЖИНИ ВІДРІЗКА 49 KB
  Подивіться на малюнок які пташки першими прилетіли до годівнички Синиці Скільки їх А які ще птахи прилетіли Снігурі Скільки їх Нам потрібно знайти скільки всього пташок стало Якою дією ми можемо дізнатися скільки всього пташок прилетіло до годівнички...
72022. Языком математики о природе и здоровье. Решение примеров на сложение и вычитание в пределах 10 29.5 KB
  Цели: Упражняться в решении примеров и задач; развивать речь и гибкость ума; закреплять знания о живой природе о значении растений в жизни человека об их лечебных свойствах; о птицах о пользе воспитывать любовь к математике. Оборудование: Карточки с решением примеров...