Linux и UNIX: программирование в shell. Руководство разработчика
вернуться

Тейнсли Дэвид

Шрифт:

Чтобы включить в отчет тех учеников, рейтинг которых не выше значения в седьмом поле, нужно лишь незначительно видоизменить предыдущий пример:

$ awk '{if($6 <= $7) print $1}' grade.txt

M. Tansley

J. Lulu J. Troll

Проверка "больше чем"

Следующая команда формирует список лидеров соревнования:

$ awk '{if ($6 > $7) print $1}' grade.txt

L. Tansley P. Bunny

9.2.7. Логические операторы

Логические операторы позволяют формировать сложные выражения, позволяющие выполнять проверку нескольких условий. Существует три логических оператора:

&& И: чтобы результат был истинным, оба операнда должны быть истинными | | ИЛИ: чтобы результат был истинным, хотя бы один из операндов должен

быть истинным! НЕ: результат проверки инвертируется

Оператор логического И

Предположим, перед нами поставлена задача выяснить, кому был присвоен зеленый пояс в мае 1999 года. Строки, отвечающие этому условию, должны в первом поле содержать значение "05/99", а во втором — "Green":

$ awk '{if($2 == "05/99" && $4 == "Green") print $0}' grade.txt

M. Tansley 05/99 48311 Green 8 40 44

Оператор логического ИЛИ

Чтобы получить список учеников, обладающих желтым или коричневым поясом, воспользуйтесь оператором | |:

$ awk '{if ($4 == "Yellow" ) || $4 ~ /Brown/} print $0}' grade.txt

P. Bunny

02/99

48

Yellow

12

35

28

J. Troll

07/99

4842

Brown-3

12

26

26

L. Tansley

05/99

4712

Brown-2

, 12

30

28

Приведенную команду можно упростить с помощью метасимвола, означающего выбор любого из двух шаблонов:

$ awk '$4 ~ /Yellow|Brown/' grade.txt

P. Bunny

02/99

48

Yellow

12

35

28

J. Troll

07/99

4842

Brown-3

12

26

26

L. Tansley

05/99

4712

Brown-2

12

30

28

9.2.8. Операторы присваивания и арифметические операторы

С помощью операторов присваивания и арифметических операторов можно создавать в сценариях awk локальные переменные и манипулировать их значениями.

Создание локальных переменных

При разработке сценариев awk не всегда удобно работать с идентификаторами полей. Лучше создать переменную, содержащую значение поля, и присвоить ей выразительное имя, чтобы в дальнейшем ссылаться на поле по имени. Подобную переменную можно получить с помощью конструкции следующего вида:

имя_переменной= $n

где n -cуществующий номер поля.

В следующем примере мы создадим две переменные: name, содержащую имена учеников (поле 1), и belts, содержащую названия поясов (поле 4). Затем будет произведен поиск учеников, обладающих желтым поясом.

$ awk '(name=$1; belts=$4; if(belts ~ /Yellow/) print name" is belt "belts}' grade.txt

P.Bunny is belt Yellow

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

Проверка значения поля

В следующем примере мы проверим, кто из учеников набрал в соревнованиях менее 27 очков. В первом варианте команды значение поля $6 непосредственно сравнивается с числом 27:

$ awk '$6 < 27' grade.txt

J.Lulu

06/99

48317

green

9

24

26

J.Troll

07/99

4842

Brown-3

12

26

26

Более универсальный способ заключается в том, чтобы перед обработкой входного файла, в процедурной части шаблона begin, создать, как в настоящей программе, набор локальных переменных с нужными значениями и ссылаться на них, когда

потребуется. Конечно, этот прием неэффективен в случае одноразовых команд, зато очень полезен в больших сценариях, так как позволяет легко вносить в них изменения. Во втором примере мы создадим переменную baseline и присвоим ей значение 27, а затем сравним с ней интересующее нас поле $6:

$ awk 'BEGIN {BASELINE=27} {if ($6 < BASELINE) print $0}' grade.txt

J.Lulu 06/99 48317 green 9 24 26

J.Troll 07/99 4842 Brown 3 12 26 26

Изменение значения числового поля

Изменяя значение поля, следует помнить о том, что содержимое входного файла на самом деле не меняется. Изменению подвергается только копия файла, которая хранится в буфере awk.

  • Читать дальше
  • 1
  • ...
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • ...

Private-Bookers - русскоязычная библиотека для чтения онлайн. Здесь удобно открывать книги с телефона и ПК, возвращаться к сохраненной странице и держать любимые произведения под рукой. Материалы добавляются пользователями; если считаете, что ваши права нарушены, воспользуйтесь формой обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • help@private-bookers.win