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

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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



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





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