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

Приложение

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


 

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

1441. Методика складання розкладу занять 213.34 KB
  Важливим елементом організації роботи навчального закладу є науковий підхід до складання розкладу занять, розглянутий у роботі В.Пайкеса Методика складання розкладу занять у загальноосвітній установі. Раціонально складений розклад занять сприяє ефективності НВП, зниженню і ліквідації перевантажень учнів, підвищенню працездатності учнів і вчителів.
1442. Прогнозирование курсов валют на рынке Forex 196.69 KB
  Главная задача любого инвестора — купить дешевле и продать дороже. Чем выше изменчивость цен актива, тем больше имеется возможностей для проведения выигрышных стратегий торговли, но они сопряжены с высоким риском. Ключевым вопросом при этом является определение направления, величины и волатильности (изменчивости) будущих цен на основе прошлых данных. В статье дается пример прогноза курсов валют на рынке Forex, полученного с применением нейронных технологий.
1443. Основы экономического управления 170 KB
  Конечные производственные результаты (выручка от реализации всей продукции). Внешняя норма доходности. Жизненный цикл проекта. Разработка концепции проекта. Показатели бюджетной эффективности. Сальдо накопленных реальных денег.
1444. Топливные насосы дизельных двигателей 183.5 KB
  Механическое регулирование топливоподачи. По способу дозирования и управления топливоподачей эти топливные насосы напоминают традиционные механические ТНВД распределительного типа. Некоторые электронные ТНВД создают давление впрыскивания около 1500 бар.
1445. Аппараты системы передачи сигналов 356.5 KB
  Принцип построения структурных схем аппаратуры индивидуальных систем передачи. Генераторное оборудование систем передачи с ЧРК. Размещение усилителей в ЛТ. Диаграмма уровней передачи. Накопление помех в ЛТ. Нормирование параметров в зависимости от протяженности и структура каналов. Особенности эксплуатации измерителя уровня П-321.
1446. Проектирование рычажного механизма 150.5 KB
  Кинематический анализ рычажного механизма. Построение планов положений механизма. Определение скорости точки В. Определение скорости точки E. Построение диаграммы скоростей выходного звена. Определение нагрузок, действующих на звенья.
1447. Создание аппарата для перегонки и ректификации 17.49 MB
  Выбор конструкционных материалов для изготовления основного аппарата. Определение скорости пара и диаметра колонны. Подробный расчет дефлегматора – конденсатора. Выбор оптимального нормализованного теплообменного аппарата.
1448. Будівництво трьохповерхового житлового будинку в м. Львові по вулиці Порічковій 68 166 KB
  Описання, розпланування, конструкцій і благоустрою. Техніко-економічні показники. Плани поверхів, підвалу, фундаменту, перекриттів. Інженерні комунікації будинку.
1449. Разработка и исследование промышленных отпаянных лазеров на парах меди мощностью 10-50 Вт для технологического медицинского оборудования 11.38 MB
  Конструкция, параметры и недостатки первого ЛПМ Криостат 1 с отпаянным саморазогревным АЭ ТЛГ-5. Выбор материала и конструкции разрядного канала. Сравнительный анализ эффективности накачки высоковольтного импульсного модулятора. Параметры, габаритные и присоединительные размеры, масса, внешний вид и конструктивные особенности отпаянных АЭ серии.