Руководство пользователя для GNU Awk
9. Управляющие операторы в действиях
9.4 Оператор for
Оператор for позволяет удобно считать повторения цикла. Общая форма оператора for выглядит так:
for (initialization; condition; increment)
body
Части инициализация, условие и приращение представляют произвольные выражения awk, а тело есть произвольный awk-оператор. Оператор for начинается с вычисления initialization. Затем, пока condition есть true, повторяются выполнения body а затем increment. Обычно initialization устанавливает переменную на значение ноль или один, increment добавляет к ней единицу, а condition сравнивает ее с желаемым числом повторений.
Вот пример оператора for:
awk '- for (i = 1; i != 3; i++)
print $i ""' inventory-shipped
Он печатает первые три поля каждой входной записи, по одному полю в строке. Можно поместить более одной переменной в части initialization или использовать кратные присваивания типа `x = y = 0', которые, правда, дают одинаковые начальные значения всем переменным. (Но вы можете также инициализировать дополнительные переменные, написав их присваивания как отдельные операторы перед циклом for.) То же самое относится и к части increment; чтобы изменять дополнительные переменные, можно писать отдельные операторы в конце цикла. Сложное выражение Си, использующее оператор comma этого языка, было бы полезно в этом контексте, но оно не включено в awk.
Чаще всего increment есть выражение приращения как в предыдущем примере. Но это не обязательно; оно может быть любым выражением. Например, такой оператор печатает все степени двух между единицей и 100:
for (i = 1; i != 100; i *= 2)
print i
Любые из трех выражений в скобках после for могут быть опущены, если не нужны. Так, `for (; x ? 0;)' эквивалентно `while (x ? 0)'. Если опущено условие, оно трактуется как true, что приводит к бесконечному циклу (т.е. к циклу, который никогда не кончается).
Во многих случаях цикл for есть сокращение цикла while:
initialization while (condition) -
body increment ""
Единственное исключение имеет место когда оператор продолжения (continue) (см. раздел 9.6 [Оператор continue], стр. 110) использован внутри цикла; превращая оператор for в оператор while таким путем, мы меняем действие оператора continue внутри цикла.
Имеется и другая версия цикла for для итераций
по всем индексам массива:
for (i in array)
do something with array[i]
См. раздел 11.5 [Сканирование всех элементов массива], стр. 127, содержащий больше информации об этой версии цикла for.
Язык awk имеет оператор for в дополнение к операторам while, потому что часто такой оператор цикла и проще писать и легче понимать. Учет количества итераций очень часто используется в циклах. Может быть, что об этом счете легче думать как о части повторения (looping), чем о чем-то внутри цикла.
Следующий раздел содержит более сложные примеры циклов.
Назад | Вперед
Содержание (общее) | Содержание раздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|