65842

Основы работы с текстовым редактором AWK и языком программирования Perl

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

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

Для чего в Perl используются операторы привязки? Операторы привязки используются для совершения над строками операций по шаблонам. Например, поиск и замена участка строки, совпавшего с регулярным выражением.

Русский

2014-08-09

52.5 KB

0 чел.

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

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

—————————

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

ОТЧЕТ

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

«Основы работы с текстовым редактором AWK и языком программирования Perl»

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

Студент:

Никитин А. С.

гр. 2088/1

Преподаватель:

Степанова Т. В.

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

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

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

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

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

3.1. Выполнение примеров

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

  1.  Разработать Perl скрипт для анализа готового файла журнала аудита.
    #!/usr/bin/perl
    open(LOG, "<$ARGV[0]") || die "File not found!"; #Открытие файла
    @
    log = <>; #Чтение содержимого в массив
    close(LOG);
    @
    logdate = sort @log; #Сортировка массива по дате
    print "By time:\n";
    foreach $line (@logdate) {
       
    if ($line ne $prev) { #Если строка не равна предыдущей...
        #(удаление одинаковых строк)
           $
    prev = $line;
           
    print "$line";
           $
    line =~ s/\n//g; #Убираются переводы строки
           ($
    date, $time, $user, $type, $param) = split '\t', $line;
         #Строка разбивается на поля
           
    if ($date ne $pdate) { #Если поле дата не равна
         #предыдущему значению
               $
    days++;   #Увеличивается счётчик дней
               $
    pdate = $date;
           }
           $
    tp{$type} = $tp{$type}.$line."\n"; #Строка добавляется
      #к элементу хэша, содержащего события её типа
           $
    us{$user}++; #Увеличивается счётчик действий пользователя
           $
    lon++ if $type eq "logout"; #Если событие – logout,
          #увеличивается счётчик
       }
    }
    print "\nBy types:\n";
    while (($type, $line) = each(%tp)) { #Вывод событий по типу
       
    print "$type\n$line";
    }
    print "\nUsers:\n";
    while (($u, $n) = each(%us)) { #Вывод количества событий пользователя
       
    print "$u - $n\n";
    }
    print "\nLogouts: $lon\n"; #Вывод количества событий logout
    print "\nDifferent days: $days\n"; #Вывод количества различных дней
  2.  Проделать вышеприведенное задание с помощью редактора AWK.
    BEGIN {
       
    FS = "\t"; #Установка разделителя полей
    }
    {
       
    x[NR] = $0; #Считывание фала в массив
       
    n++;
    }
    END {
       
    print "Events by date"
       
    for (i = 1; i <= n; i++) { #Сортировка событий по дате
           
    for (j = 1; j < n; j++) {
               
    if (x[j] > x[j + 1]) {
                   
    t = x[j];
                   
    x[j] = x[j + 1];
                   
    x[j + 1] = t;
               }
           }
       }
       
    for (i = 1; i <= n; i++) { #Вывод событий
           
    if (x[i] != prev) { #Удаление дублирующихся событий
               
    ni++;
               
    f[ni] = x[i]; #Массив fi будет содержать журнал
        #без дубликатов событий
               
    prev = x[i];
               
    print x[i];
               
    split (x[i], a); #Разделение строки на поля
               
    if (a[1] != pdate) { #Если дата не равна предыдущей
                   
    days++; #Увеличиваем количество различных дней
                   
    pdate = a[1];
               }
           }
       }
       
    print "\nEvents by type"
       
    for (i = 1; i <= ni; i++) { #Сортировка событий по типу
           
    for (j = 1; j < ni; j++) {
               
    split(f[j], a1);
               
    split(f[j + 1], a2);
               
    if (a1[4] > a2[4]) {
                   
    t = f[j];
                   
    f[j] = f[j + 1];
                   
    f[j + 1] = t;
               }
           }
       }
       
    prev = "";
       
    for (i = 1; i <= ni; i++) {
           
    split(f[i], a);
           
    us[a[3]]++; #Подсчёт событий по пользователям
           
    if (a[4] == "logout") lg++; #Подсчёт событий типа logout
           
    if (a[4] != prev) {
               
    print a[4];
               
    prev = a[4];
           }
           
    print f[i];
       }
       
    print "\nUsers"
       
    for (i in us) print i " - " us[i]; #Вывод количества событий
          #пользователя
       
    print "\nLogouts: " lg; #Вывод количества событий типа logout
       
    print "\nDifferent days: " days; #Вывод количества различных
          #дней
    }
  3.  Используя скриптовый язык Perl, разработать программу, которая осуществляет просмотр текущего каталога и выводит на экран его содержимое группами в порядке уменьшения числа ссылок на файлы (в том числе имена каталогов).
    #!/usr/bin/perl
    open(LS, "ls -l|grep -v 'итого'|") || die "Error!"; #Получение списка
            #файлов
    @
    ls = <LS>; #Считывание в массив
    close(LS);
    foreach $rec (@ls) { #Для каждой записи
       ($
    dir, $lnum, $b, $c, $d, $e, $f, $name) = split '[ \n]+', $rec;
     #Разделение на поля
       $
    dir =~ s/[-rwx]//g; #Получение строки, содержащей d, если это
        #каталог
       $
    recn[$i] = $lnum."\t".$dir."\t".$name."\n"; #Получение строки
     #вида “количество ссылок\
    td, если каталог\tимя”
       $
    i++;
    }
    @
    sr = sort {$b cmp $a} @recn; #Сортировка в обратном порядке
    $
    prev = "";
    foreach $rec (@sr) {
       ($
    a, $b) = split '\t+', $rec;
       
    if ($a ne $prev) { #Вывод заголовка группы файлов и каталогов
           print "~~~$a~~~\n";
           $prev = $a;
       }
       print $rec; #Вывод строки
    }

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

  1.  Какие управляющие конструкции доступны при программировании в AWK?
    if-else, while и for.
  2.  Для чего в Perl используются операторы привязки?
    Операторы привязки используются для совершения над строками операций по шаблонам. Например, поиск и замена участка строки, совпавшего с регулярным выражением.
  3.  В каких ситуациях в Perl используются операторы ограничители строк?
    Используются при обработке текста с помощью регулярных выражений.

4. Выводы

AWK – удобное средство для форматирования и составления статистики по текстовым файлам. В целом имеет принцип работы скриптов схожий с SED, однако предоставляет большие возможности по их написанию.
Perl – полноценный язык программирования общего назначения, однако чаще всего он используется для обработки текстов, так как содержит огромное количество средств для этого.

Приложение

Исходные тексты программ


 

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

16918. Создание простых запросов в Windows, Access 73.5 KB
  Лабораторная работа № 22 Создание простых запросов. Оборудование: ПЭВМ Программное обеспечение: Windows Access Цель работы: приобретение и закрепление практических навыков работы в Access Выбор записей отвечающих определенному условию можно осуществить как с
16919. Создание реляционной базы данных. Разработка инфологической модели и создание структуры реляционной базы данных 133.5 KB
  Разработка инфологической модели и создание структуры реляционной базы данных Для разработки инфологической информационно-логической модели базы данных выделим три объекта: Студенты Дисциплины и Преподаватели. Типы связей между этими
16920. Формирование сложных запросов в Windows, Access 86 KB
  Лабораторная работа № 2425 Формирование сложных запросов Оборудование: ПЭВМ Программное обеспечение: Windows Access Цель работы: приобретение и закрепление практических навыков работы в Access Задание 1. Формирование сложных запросов Создайте следующие зап
16921. Программируемый контроллер прямого доступа к памяти КР580ВТ57 2.84 MB
  ЛАБОРАТОРНАЯ РАБОТА №5 Программируемый контроллер прямого доступа к памяти КР580ВТ57 Методические указания Цель работы: Знать функциональные возможности программируемого контроллера прямого доступа к памяти КР580ВТ57 логику его работы и способы подключения ег...
16923. ТРИ СТАТЬИ ПО ТЕОРИИ СЕКСУАЛЬНОСТИ 813 KB
  ТРИ СТАТЬИ ПО ТЕОРИИ СЕКСУАЛЬНОСТИ Издательство Алетейя г. СПб 1998 г. ПРЕДИСЛОВИЕ АВТОРА К 3му ИЗДАНИЮ Наблюдая в течение десятилетия за тем как была встречена эта книга и какое впечатление она произвела я хотел бы предпослать третьему изданию несколько за...
16924. Экспрессия генов 3.88 MB
  Экспрессия генов. М.: Наука 2000. 000 с. ил. ISBN 5020018902 В монографии рассмотрены современные представления о строении и механизмах функционирования генов прокариот и эукариот а также основные методы их исследования. Книга состоит из двух частей. В первой части обс
16925. ФИЗИОЛОГИЯ СЕРДЦА И СОСУДОВ 797.5 KB
  Работа сердца как насоса, его гемодинам ическая производительность, является одним из решающих факторов, определяющих интенсивность кровотока и, соответственно, уровень снабжения органов и тканей кислородом и питательными веществами. При повышении активности организма, например, при совершении им определенной физической работы
16926. БИОЭЛЕКТРИЧЕСКИЕ ПОТЕНЦИАЛЫ. ПОТЕНЦИАЛ ДЕЙСТВИЯ НЕРВА 64.5 KB
  Тема. БИОЭЛЕКТРИЧЕСКИЕ ПОТЕНЦИАЛЫ. ПОТЕНЦИАЛ ДЕЙСТВИЯ НЕРВА. Вопросы теоретической подготовки: Строение нерва и нервных волокон. Потенциал действия. Динамика изменения ионной проницаемости. Критический уровень деполяризации. Причины абсолютной и относи...