Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Компьютерные сети / Комп сети 5_awk.ppt
Скачиваний:
25
Добавлен:
22.02.2016
Размер:
167.42 Кб
Скачать

match (Str, Re) - возвращает позицию в строке Str, в которой располагается

подстрока, удовлетворяющая регулярному выражению Re. Она возвращает индекс начала подстроки, удовлетворяющей

шаблону, или 0, если подстрока не существует.

Также эта функция определяет значения переменных RSTART и RLENGTH.

52

Примеры:

1. Например, в конвейере echo 9/29/2014 |

awk '{ split ( $0,date,"/"); print date [3]}‘

строка "9/29/98", которая будет помещена в переменную $0, разбивается на массив date из трех элементов:

date[1]=9,

date[2]=29,

date[3]=2014. Причем на экран будет

выведен значение года - 2014.

53

 

2. Пусть в файле file.txt находятся строки:

Toronto

 

Paris

 

Edmonton

 

Программа на awk имеет вид:

 

awk ‘{save = $0

 

printf “15s\t” $0

 

gsub(/on/,”ON”,$0)

 

printf “15s\t” $0

 

sub(/on/,”ON”,save)

 

printf “15s\t” save

 

}’ file.txt

54

В результате получаем:

 

Toronto

TorONto

TorONto

Paris

Paris

Paris

Edmonton

EdmONton

EdmONtON

55

Массивы

Подобно переменным, массивы не нужно описывать.

Размер массива ограничен только объемом памяти.

В awk индексом массива может быть не только целое число, но и любое значение.

Название переменных и массивов

чувствительно к регистру.

56

Пример.

Пусть необходимо подсчитать суммарное значение для каждого имени игрока.

Anna 400

John 100

Mary 200

Mary 300

John 100

Anna 100

Mary 100

57

В результате должно быть: John 200,

Mary 600,

Anna 500.

Для этого применим программу: awk ‘END {

for (Name in SUM)

{print Name SUM [Name]}} {SUM [$1] += $2}’

58

Здесь каждое имя $1 служит индексом в массиве SUM.

В конце применена специальная форма цикла for для перебора всех элементов SUM и их печати.

Синтаксис этого варианта цикла for таков:

for (Var in Array) Operator

Здесь цикл охватывает индексы массива, а не его элементы, устанавливая значение "Var" равным каждому индексу поочередно.

59

Однако порядок появления индексов неопределен, поэтому может возникнуть необходимость в их сортировке.

Например, в приведенном примере выходной поток можно по конвейеру

передать команде sort, чтобы имена шли в порядке убывания значений:

awk '.....' | sort +1 –nr

(сортировка идет по численному полю, начиная со второго в порядке убывания).

60

Такой прием очень удобен, чтобы определить, например, частоту появления

слов во входном потоке:

cat > wordfreq.file awk 'END {

for (word in Num) print word Num[word]}

{ for ( i=1; ; i++) Num[$i]++}‘ wordfreq.file | sort +1 -nr

61

Соседние файлы в папке Компьютерные сети