Материал: Лабы

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

В циклах while можно использовать команды break и continue. Первая позволяет досрочно завершить цикл и приступить к выполнению команд, расположенных после него. Вторая позволяет, не завершая до конца текущую итерацию, перейти к следующей.

Вот как работает команда break:

awk '{

total = 0

i = 1

while (i < 4)

{

total += $i

if (i == 2)

break

i++

}

avg = total / 2

print "The average of the first two elements is:",avg

}' testfile

Команда break в цикле while

    1. Цикл for

Циклы for используются во множестве языков программировании. Поддерживает их и awk. Решим задачу расчёта среднего значения числовых полей с использованием такого цикла:

awk '{

total = 0

for (i = 1; i < 4; i++)

{

total += $i

}

avg = total / 3

print "Average:",avg

}' testfile

Цикл for

Начальное значение переменной-счётчика и правило её изменения в каждой итерации, а также условие прекращения цикла, задаются в начале цикла, в круглых скобках. В итоге нам не нужно, в отличие от случая с циклом while, самостоятельно инкрементировать счётчик.

    1. Форматированный вывод данных

Команда printf в awk позволяет выводить форматированные данные. Она даёт возможность настраивать внешний вид выводимых данных благодаря использованию шаблонов, в которых могут содержаться текстовые данные и спецификаторы форматирования.

Спецификатор форматирования — это специальный символ, который задаёт тип выводимых данных и то, как именно их нужно выводить. Awk использует спецификаторы форматирования как указатели мест вставки данных из переменных, передаваемых printf.

Первый спецификатор соответствует первой переменной, второй спецификатор — второй, и так далее.

Спецификаторы форматирования записывают в таком виде:

%[modifier]control-letter

Вот некоторые из них:

  • c — воспринимает переданное ему число как код ASCII-символа и выводит этот символ;

  • d — выводит десятичное целое число;

  • i — то же самое, что и d;

  • e — выводит число в экспоненциальной форме;

  • f — выводит число с плавающей запятой;

  • g — выводит число либо в экспоненциальной записи, либо в формате с плавающей запятой, в зависимости от того, как получается короче;

  • o — выводит восьмеричное представление числа;

  • s — выводит текстовую строку;

Вот как форматировать выводимые данные с помощью printf:

awk 'BEGIN{

x = 100 * 100

printf "The result is: %e\n", x

}'

Форматирование выходных данных с помощью printf

Тут, в качестве примера, мы выводим число в экспоненциальной записи. Полагаем, этого достаточно для того, чтобы вы поняли основную идею, на которой построена работа с printf.

    1. Задания лабораторной работы

    2. Используя awk:

  1. вывести на экран из файла calendar.txt день недели и текущее число в виде «сегодня вторник … августа»;

  2. вывести список каталогов, имена которых состоят из русских букв, без дополнительных полей;

  3. определить количество(сумму) байтов, занятых всеми вашими текстовыми файлами (txt) в каталогах и подкаталогах;

  4. определить количество блоков, содержащих ваш текущий каталог;

  5. изменить права доступа для некоторых файлов текущего каталога и провести сортировку списка по возможностям доступа;

  6. напечатать список каталогов, в которых обнаружены файлы с именами data*.txt;

  7. подсчитать, сколько раз пользователь входил в систему;

  8. напечатать список пользователей, отсортированный по времени.

    1. Выводы

В данной лабораторной работе мы познакомились с возможностями программируемого фильтра awk. Фильтр широко применяется для обработки данных и формирования различного вида отчетов. Для более глубокого изучения всех возможностей фильтра рекомендуется изучить справочные страницы по команде awk.

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