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

Приложение

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


 

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

46813. Характеристики игры как ведущей деятельности ребенка дошкольного возраста 31.5 KB
  Характеристики игры как ведущей деятельности ребенка дошкольного возраста. Мотивация игры – не выиграть а играть. Существенное отличие игры как ее описывает Селли заключается в том что ребенок начиная играть старается быть сестрой. Единица игры – роль которую берет на себя ребенок ее суть – выполнение действия.
46814. Текстовый процессор Word. Методические указания к лабораторным работам 483 KB
  В соответствии с требованиями Федерального государственного образовательного стандарта высшего профессионального образования для ряда технических специальностей выпускник должен владеть компьютерными методами сбора
46815. Сущность и содержание институциональных интересов субъектов рыночной экономики. Трактовка институционального интереса в трудах Т. Веблена, Дж. Коммонса, А. Шюллера, Ф. Петерхоффа 31.54 KB
  К жестким ценностям относят настойчивость высокую значимость работы успех и конкуренцию ценность карьерного роста и др. Харрод в своем исследовании заключается в том чтобы найти механизмы обеспечения такого темпа роста который позволил бы достигнуть полной загрузки производственных мощностей и полной занятости растущего населения. Харрод исходит из того что темп роста главным образом зависит от объема инвестиций и вводит понятие капитальный коэффициент с. Этот коэффициент демонстрирует уровень капиталоемкости прироста т.
46816. Специальные налоговые режимы. Мировая валютная система и формы ее организации 33.55 KB
  Основные элементы мировой и региональной валютных систем: международные платежные средства выполняющие роль мировых денег; условия и режимы обратимости валют; механизм и режим валютных курсов; формы международных расчетов; кредитные орудия обращения и порядок их использования в международных расчетах; международные ликвидные активы и порядок их регулирования; режим международных валютных и золотых рынков и межгосударственные институты регулирующие валютные отношения. А1 Наиболее ликвидные активы денежные средства и краткосрочные...
46817. Медицина. Прнципы абилитации и реабилитации детей с заболеваниями нервной системы и органов чувств 28.4 KB
  Так на фоне самого заболевания у детей могут возникнуть судорожные приступы указывающие на заинтересованность в процессе самого вещества мозга. Воспалительный процесс может переходить с оболочек головного мозга на периферические нервы слуховой и зрительный реже отводящий и тройничный создавая определенную клиническую картину. В ряде случаев при менингитах воспалительный процесс не ограничивается мозговыми оболочками а распространяется на вещество мозга которое также подвергается различным патологическим нарушениям менингоэнцефалит....
46818. Функции менеджмента 31.65 KB
  Экономическое прогнозирование – это предвидение хода экономического развития на предстоящий период для конкретной организации. Стратегическое планирование высший уровень – это попытка взглянуть в долгосрочной перспективе на основополагающие составляющие организации; оценить какие тенденции наблюдаются в ее окружении; определить каким вероятнее всего будет поведение конкурентов. вписываются в такую систему при которой каждый направляет свои усилия на достижение общих и главных целей...
46819. Рыночная система и рыночный механизм 33.07 KB
  Рыночная экономика это экономическая система основанная на принципах свободного предпринимательства многообразия форм собственности на средства производства рыночного ценообразования договорных отношений между хозяйствующими субъектами ограниченного вмешательства государства в хозяйственную деятельность. черты: основа экономики частная собственность на средства производства; многообразие форм собственности и хозяйствования; свободная конкуренция; рыночный механизм ценообразования; саморегулирование рыночной экономики; договорные...
46820. Статистика уровня жизни населения 32.18 KB
  Статистика уровня жизни населения. Доходы и расходы населения. Кроме этих основных показателей выделяют также некоторые информационные показатели: ВНП на душу населения национальный доход на душу населения объем потребления на душу населения и ряд других. Информационными источниками для построения системы показателей по уровню жизни населения являются данные из материалов различных разделов государственной статистики демографической статистики труда статистики цен социальной статистики материалы выборочных обследований бюджетов...
46821. Региональная экономическая политика 33.67 KB
  Участниками бюджетного процесса являются: Президент Российской Федерации; высшее должностное лицо субъекта РФ глава муниципального образования; законодательные представительные органы государственной власти и представительные органы местного самоуправления далее законодательные представительные органы; исполнительные органы государственной власти исполнительнораспорядительные органы муниципальных образований; Центральный банк Российской Федерации; органы государственного муниципального финансового контроля; органы управления...