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

Приложение

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


 

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

35754. Котел-утилизатор для охлаждения конвертерных газов В-90Б 364.5 KB
  Рациональное использование топливно-энергетических ресурсов-важнейшая задача, значимость которой все возрастает. Значительная экономия топливно-энергетических ресурсов может быть достигнута при более широком вовлечении в топливно-энергетический баланс страны вторичных..
35755. Дорожный набор. Творческий проект 162.5 KB
  5 Развитие идеи6 Изготовление набора6 Инструкция по сборке скрепера 7 Оценка стоимости готового изделия.Процес изготовления изделия.Анализ готового изделия. Своей задачей я ставлю увеличение функций данного набора и увеличение прочности изделия.
35756. Скрепер волокуша. Творческий проект 190.5 KB
  Инструменты и оборудование Круглопильный станок Сверлильный станок Электрическая дрель Рубанок Ножницы по металлу Напильник драчевый Отвёртка Набор свёрл Кернер Киянка Молоток Стамеска Инструкция по изготовлению скрепера.5мм 055метр 500 руб. 110 руб.7 м 30 руб.
35757. Проектирование и разработка фирменного блюда 353.5 KB
  Выполнение теоретической части предусматривает самостоятельный выбор рецепта фирменного блюд, выполнение технологических расчётов по составлению рецептуры на данное блюдо, с чётом потерь при механической и тепловой обработках, расчетов массы полуфабриката и выхода готового изделия. По окончании выполнения расчётов, они проверяются и утверждаются преподавателем.
35758. Подари радость детям 20.55 MB
  Хорошево 2012 Содержание Введение Аннотация Характеристика территории БДОУ План работ Бюджет проекта Предполагаемые результаты Вывод Введение Дошкольный возраст время когда закладываются самые глубинные оценки окружающего мира. Проект Подари радость детям предусматривает благоустройство и декоративное оформление участков территории детского сада в деревне Хорошево Грязовецкого района Вологодской области приобретение игрового комплекса и его установка строительство нового забора и ремонт...
35759. Вишивка ікони бісером 174.5 KB
  Призначення виробу різноманітне. По-перше кому не подобається гарна яскрава картина, та ще й ікона? Це може бути дуже гарним і приємним подарунком мамі, бабусі, сестрі, татові та і будь-якій близькій тобі людині
35760. Хрящи гортани, особенности их строения и развития у детей, изменения в период мутации 15.64 KB
  Наибольший из них — непарный щитовидный хрящ, у которого различают две соединённых между собой под почти прямым (у мужчин) или тупым (120° у женщин) углом четырёхугольные пластинки. От задних краёв пластинок отходит две пары рожек (верхние и нижние).
35761. Ференц Ліст 315.5 KB
  Біографія Ференц Ліст народився в селі Доборьян австрійська назва Райдинг біля міста Шопрон Угорщина Батьки 1 Батьки Франца Ліста Адам Ліст 1776 1826 служив у князя Естергазі доглядачем поголів'я овець. Після закінчення католицької гімназії в Прессбурзі нині Братислава Адам Ліст став послушником в францисканському ордені але через два роки вирішив з нього піти. Він на все життя зберіг дружбу з одним із францисканців що як припускають деякі дослідники надихнуло його назвати сина Францем а сам Ліст також підтримуючи зв'язки...
35762. Вітраж «Вічність». Творчий проект 10.02 MB
  Історія вітража і вітражного мистецтва сягає своїм корінням у часи раннього середньовіччя. Спрощення стосується лише технології але не до художніх достоїнств вітража тут все залежить від здібностей і смаку. Розмір і форма вітража завжди залежать від того місця куди його встановлять. Слід зменшити краю шаблонів на товщину металу з якого виготовляють жилку що скріпляє окремі частини вітража.