П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 181804 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 80929 раз(а).

Учебник HTML.
Просмотров 76572 раз(а).

Руководство по PHP5.
Просмотров 47570 раз(а).

Хостинг через призму DNS.
Просмотров 55157 раз(а).

Подборка текстов стандартных документов.
Просмотров 47149 раз(а).

Учебник PHP - Самоучитель
Просмотров 53563 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 54211 раз(а).

Внешние атаки...
Просмотров 43838 раз(а).

Учебник PHP.
Просмотров 39267 раз(а).

SSI в примерах.
Просмотров 29114 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





II. Язык обработки шаблонов awk

7. Действия

В awk возможны следующие действия:

  1. присваивания выражений;
  2. операторы управления
  3. операторы вывода;
  4. встроенные функции.

Операторы управления

Простейшие операторы

exit завершить выполнение программы;
next перейти к следующей строке, управление на начало awk-программы;
break выход из цикла;
continue переход к следующей итерации;

Структурные операторы

if (условие) {операторы} [else {операторы}]

while (условие) {операторы}

for (выражение; условие; выражение) {операторы}

for (индекс in имя_массива) {операторы}

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

Примеры

1) awk ' $4~/40/ {if($3<=1980) {print("Фамилия: " $1 )

M["40"]++}}

$4~/50/ {M["50"]++}

END {for(i in M)

{print(" i =" i " M[" i "]=" M[i])}} ' f-awk

Результат:
Фамилия: Петров

Фамилия: Сидоров

i =40 M[40]=2

i =50 M[50]=1



2) awk ' BEGIN {ORS = " "}

{ for(k=NF; k>0; --k) {print $k}

{print RS}

} ' f-awk |

sed 's/^ //'
Результат:
50 1980 И.И. Иванов 

40 1979 А.В. Петров 

40 1979 С.К. Сидоров 

60 1970 И.Х. Хведоров

Здесь, кроме изменения очередности полей в строке на противоположное (что делает цикл "for"), предварительно устанавливается выходной разделитель - пробел и весь результат предварительно выдается в одну строку, поэтому после обработки каждой строки выдается команда "print RS" для перевода выходной строки. Редактор "sed" подключен через конвейер, чтобы убрать возможные пробелы в начале строки. Существенная деталь. Если запустить лишь базовую структуру

awk '{ for(k=NF; k>0; --k) {print $k}}' f-awk

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

50

1980

И.И.

Иванов

40

1979

А.В.

Петров

40

1979

С.К.

Сидоров

60

1970

И.Х.

Хведоров

Однако, если поставим ";" сразу после условия, т.е. сделаем пустое тело цикла, за пределы которого вынесен "print $k"

awk '{ for(k=NF; k>0; --k); {print $k}}' f-awk

то получим исходную таблицу

Иванов И.И. 1980 50

Петров А.В. 1979 40

Сидоров С.К. 1979 40

Хведоров И.Х. 1970 60

поскольку "$k" после выхода из цикла будет иметь значение "0", а "$0" - соответсвует всей строке в качестве значения(!), то "print $k" будет после каждого цикла печатать полные строки.


Назад | Содержание | Вперед


Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru