Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

LR OC / вар 26 / lr_2

.docx
Скачиваний:
3
Добавлен:
30.04.2013
Размер:
18.56 Кб
Скачать

Министерство образования Российской Федерации.

Московский государственный институт электроники и математики

(технический университет)

Кафедра Кибернетики

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

“ Использование программируемого фильтра awk ”

по дисциплине «Операционные системы»

Выполнил студент группы С-41

Проверил

Гостев И.М.

Москва 2010

Информация по фильтру awk

awk - UNIX утилита, которая создавалась как стандартная утилита OC UNIX (один из её создателей Брайен Керниган, разработавший UNIX). Утилита awk, была создана в 1977г. и объединяла свойства фильтров sed и grep. В дальнейшем её возможности значительно расширились.

Команда awk принимает в качестве аргументов инструкцию фильтра и список имён файлов. Инструкция заключается в одинарные кавычки и состоит из двух сегментов: образца (условия) и действия. Действия в свою очередь заключаются в фигурные скобки. Таким образом синтаксис команды будет выглядеть так:

    awk 'образец {действие}' имена_файлов

Утилита awk получает данные либо из файлов, либо со стандартного устройства ввода. Образец нужен для выбора каких, то конкретных строк, например содержащих какое-то слово. Действие отвечает за, то что будет сделано с найденой по образцу строкой. Если имена_файлов не указаны, то входные данные берутся со стандартного устройства ввода. Если действие не указано, то строка отображается на стандартном устройстве вывода (экране). Если не задан образец, то действие выполняется со всеми строками. Рассмотрим несколько простых примеров:

    awk '/paint/ {print}' db.dat    - здесь на экран будут выведены все строки содержащие слово paint из файла db.dat

    awk '/paint/' db.dat                 - то же что и в предыдущим примером, но здесь действие выбрано по умолчанию

    awk '{print}' db.dat               - выводит на экран весь файл db.dat

        Также awk может выбирать строки, используя образец, содержащий специальные символы. Расмотрим несколько примеров:

    awk '/paint/ {print}' db.dat      - ищет строку с образцом paint, и найдя её выводит на экран

    awk '/^new/ {print}' db.dat     - поиск образца производится в начале каждой строки

    awk '/old$/ {print}' db.dat      - поиск образца выполняется в конце строки

        Ещё имеются таие специальные символы как:

  • точка - обозначает любой символ

  • звёздочка - несколько экземпляров образца

  • квадратные скобки - набор символов

        Примеры их использования:

    awk '/.nt/ {print}' db.dat      - ищет строку в которой за одним произвольным символом следуют символы "nt"

    awk '/[0-9]*.50/ {print}' db.dat   - ищет строки в которых встречается время с 50 минутами(13:50 или 3_50)

        Кроме этого awk использует специальные символы расширеного набора:

  • "+" - вариант "*", и обозначает один или несколько экземпляров символа

  • "?" - вариант "*", и обозначает ни одного или один экземпляр символа

  • "|" - позволяет задать другие искомые образцы

    Например:

    awk '/new|paint/ {print}' db.dat   - ищет строку, содержащую либо образец new, либо образец paint    

Переменные, константы и операции над ними

       Существует три типа переменных:

  • переменные для обозначения полей

  • специальные переменные

  • пользовательские переменные

        Первые два типа awk определяет автоматически, третий тип определяет пользователь. Можно определить арифметические и строковые константы. Арифметические константы состоят из цифр, а строковые - из любых символов, заключённых в двойные кавычки.

        Поле - любой набор символов, ограниченный разделителем полей (по умолчнию в качестве разделителя используется пробел или символ табуляции). awk нумерует поля начиная с 1. Имя переменной, обозначающей поле, состоит из знака $ и номера поля ($2 обозначает второе поле, $0 - переменая которая содержит все поля). Набор специальных переменных содержит информацию об обрабатываемой строке (эти переменные сведены в таблице).  

Переменные

Описание

  NR

  номер тукущей строки

  NF

  число полей в текущей строке

  RS 

  разделитель строк на вводе, по умолчанию "\0"

  FS

  разделитель полей на вводе, по умолчанию пробел или табуляция

  ORS

  разделитель строк на выводе

  RSOFS

  разделитель полей на выводе

  FSOFMT

  формат вывода чисел

  FILENAME

  имя входного файла

        Рассмотрим пример с использованием переменных для обозначения полей и специальных переменных:

    awk '{print NR, $2, $4}' db.dat  - в этом примере на экран будут выведены все строки программы, но только с полями ноиер 2 и 4, а перед каждой строкой будет стоять её номер.

    awk '{print $4, $3, $2, $1; print $0}' db.dat   - здесь все строки файла появятся на экране два раза, но один раз из этих двух, поля будут стоять наоборот.

    awk 'BEGIN {ORS=">"} {print}' db.dat   - в этом примере будут выводиться все строки файла, но после каждой строки будет ставиться символ ">".

    awk '{print} END {print("FileName=" FN)}' db.dat   - здесь после вывода файла будет выводиться имя файла.

    awk 'BEGIN {FS="."} {print NF,$0}' db.dat   - тут входной файл имеет в качестве разделителей полей символ ".".

     Остальные переменные используются аналогично.

Выполнение работы

c-41-26$ last c-41-26 | awk ' END {print NR-2}'

17

Соседние файлы в папке вар 26