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 – полноценный язык программирования общего назначения, однако чаще всего он используется для обработки текстов, так как содержит огромное количество средств для этого.

Приложение

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


 

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

77592. Устройства печати 2.15 MB
  По принципу переноса изображения на носитель: литерные; матричные; лазерные; струйные; сублимационные; По количеству цветов печати: чёрно-белые монохромные; цветные. Основная часть линейно-матричного принтера это конструкция состоящая из станины имеющей ширину печати...
77593. Формирование и использование местных финансов 124.5 KB
  Формирование и использование местных финансов основываются на принципах самостоятельности государственной финансовой поддержки и гласности осуществляются в соответствии с Конституцией Российской Федерации Федеральным законом...
77594. Функции полиции и борьба с преступностью 230 KB
  В сегодняшней России со всей очевидностью проявляется настоятельная необходимость борьбы с такими антиобщественными явлениями, как пьянство, профессиональное нищенство, азартные игры, что, в свою очередь, требует обратиться к соответствующему историческому опыту.
77595. Проектування просторових тонкостінних покриттів конспект лекцій 1.9 MB
  Основи проектування просторових залізобетонних конструкцій. Пологі оболонки додатної гаусової кривизни, прямокутні в плані. Оболонки від’ємної гаусової кривизни, прямокутні в плані. Довгі циліндричні оболонки. Короткі циліндричні оболонки та призматичні складки. Загальні поняття та конструювання
77596. Чернігівський колегіум 450.5 KB
  Результатом плідної співпраці архієпископів і викладачів колегіуму стала низка друкованих прозових та віршованих творів відомих широкому загалу тогочасного суспільства. Викладачі та вихованці колегіуму проводили значну просвітницькопедагогічну діяльність...
77599. Реферат. Написание реферата 96.5 KB
  Модели защиты рефератов Как готовить рефераты с помощью интернета Общие требования к реферату методические рекомендации для студента Содержание и оформление разделов реферата Варианты оформления различных видов произведений печати в списке литературы реферата...