Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_ПСРВ.doc
Скачиваний:
26
Добавлен:
12.02.2016
Размер:
1.6 Mб
Скачать

Практическое занятие №7 Работа с текстовыми файлами Цель – знакомство с командами, работающими с текстовыми файлами (awk-интерпретатор скриптовый)

1. Краткие теоретические сведения

awk – команда контекстного поиска и преобразования текста. Она - фильтр. Ее можно рассматривать как оболочку "awk" в оболочке "shell". Эта утилита, предназначенная для простых, механических и вычислительных манипуляций над данными. Довольно несложные операции часто необходимо выполнить над целыми пакетами файлов, а писать для этого программу на одном из стандартных языков программирования является утомительным и, как правило, не очень простым делом. Оптимальное решение проблемы - использование специальной утилиты awk, включающей в себя не громоздкий и удобный язык программирования, позволяющий решать задачи обработки данных с помощью коротких программ, состоящих из двух-трех строк. Утилита awk изначально объединяла свойства утилит sed и grep.

awk сканирует input (стандартный или указываемый набор файлов), и над строками, удовлетворяющими заданному образцу, выполняет указываемые действия. Строка может содержать максимально до 256 символов. Команда awk сопоставляет строки исходных файлов с шаблонами, определенными в программе. Шаблоны можно задать либо непосредственно в командной строке, либо поместить в файл с именем программа и воспользоваться опцией -f. Если шаблоны указаны в командной строке, их следует заключить в одинарные кавычки ('), чтобы избежать интерпретации shell'ом.

СИНТАКСИС

awk [опции] ['скрипт_awk'] [файл...]

может быть записан в двух вариантах:

1. awk [-Fc] [-f file] [files]

file - файл с AWK-программой

2. awk [-Fc] [prog] [files]

prog – программа в командной строке

files - файлы, предназначенные для AWK-обработки.

-Fc - устанавливает разделитель полей

ОПИСАНИЕ

Утилита awk ищет в файле строки, удовлетворяющие шаблонам, заданным в скрипте_awk, и выполняет над ними действия, заданные в скрипте_awk. Если не указано ни одного файла или задано имя файла -, используется стандартный ввод.

ОПЦИИ

-F символ

указывает символ, используемый в обрабатываемом тексте как разделитель полей. По умолчанию - пробел.

-f файл

указывает имя файла, из которого читается скрипт_awk. Если эта опция задана, скрипт_awk в командной строке не вводится.

1.1. Язык awk

Общая структура AWK-программы

1. Язык программирования AWK допускает использование:

1.1. Полей; каждая сканируемая строка рассматривается как состоящая из полей, разделенных разделительными символами (по умолчанию - пробел).

На поля можно ссылаться из AWK программы следующим образом:

$1 - Первое поле;

$2 - Второе поле;

... и так далее...

$0 - Ссылается на всю строку целиком.

Строка может содержать максимально до 100 полей.

1.2. Переменных

  • стандартных переменных:

К предопределенным относятся:

Умолчания:

NR - Номер текущей входной строки

NF - Число полей во входной строке

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

"\0"

FS - Разделитель полей во входной строке

пробел и/или табуляция

ORS - Разделитель записей в выходном файле

RS

OFS - Разделитель полей в выходной строке

FS

OFMT - формат вывода чиcл

"%.6g"

FILENAME - Имя текущего обрабатываемого файла.

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

Они не требуют объявления, а автоматически объявляются при их появлении в программе. Переменные могут интерпретироваться как числовые или строковые, интерпретация выполняется в зависимости от контекста использования переменной.

  • массивов.

Массив не объявляется, а начинает существовать в момент первого использования, т.е. принимают значения из контекста. Массивы в скрипте awk являются динамическими, то есть, новые элементы добавляются в массив по мере необходимости. Индексом в массиве может быть как числовое (ненулевое), так и строковое значение. Массивы ассоциативные, т.е. не по вычисляемому индексу, а по совпадению содержания.

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

x = 1, x воспринимается как число;

x = " ", x - строка;

x + "abc" - результат операции интерпретируется как число независимо от того, было ли х числом или строкой. Если строка не может быть интерпретирована как число ("abc"), то ее значение становится 0.

Строка может содержать максимально до 256 символов.

Ссылки на поля $1, $2, ... могут интерпретироваться в качестве переменных, например:

$1 = "3" + $2 - первое поле принимает значение второго поля, увеличенного на 3.

$(i+1) - интерпретируется как поле, номер которого зависит от значения переменной i.

Допускается использование массивов. Массивы не объявляются, а принимают значения из контекста, например:

x[NR] = $0 - элементу массива x, индексированному NR, присваивается обрабатываемая строка.

x["apple"] - элементы массива могут индексироваться не числовым значением, т.е. строкой.

1.3. Арифметических выражений.

2. Образец (шаблон):

2.1. Регулярное выражение;

2.2. Выражение отношения;

2.3. Комбинация образцов;

2.4. BEGIN и END.

3. Действие:

3.1. Последовательность предложений, разделенных ``;'' или ``\n'' (новая строка). Где предложение:

Вывод (Печать);

Присваивание;

Встроенная функция;

Управляющая структура.

Программа (Скрипт_awk) представляет собой программу на специальном языке awk, описывающую шаблоны, по которым отбираются строки и действия над ними. Скрипт представляет собой последовательность элементов, каждый из которых имеет вид:

[ шаблон ] { действие }

[ шаблон ] { действие }

При работе awk читает файл последовательно, строку за строкой и над строками, удовлетворяющими заданным в скрипте шаблонам, выполняет заданные действия. Семантика элемента такова, что если находится строка, соответствующая данному шаблону, то над ней выполняется данное действие.

Частные случаи:

  • {действие} - Если шаблон пропущен, то действие выполняется над всеми строками файла.

  • шаблон - когда выводятся строки с данным шаблоном.

Описание шаблонов основывается на базовых регулярных выражениях (РВ), описание действий - на синтаксисе языка программирования C. Действие может состоять из последовательности операторов, разделяемой ";" или переводом строки или закрывающей скобкой.

Возможны комментарии (как в shell "#.........").