Поиск по сайту:

Как использовать операторы сравнения с Awk в Linux — часть 4


При работе с числовыми или строковыми значениями в строке текста фильтрация текста или строк с помощью операторов сравнения может оказаться полезной для пользователей команд Awk.

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

Что такое операторы сравнения в Awk?

Операторы сравнения в Awk используются для сравнения значений чисел или строк и включают в себя следующее:

  1. > – больше, чем
  2. < – меньше чем
  3. >= – больше или равно
  4. <= – меньше или равно
  5. == – равно
  6. != – не равно
  7. some_value ~ /pattern/ – true, если some_value соответствует шаблону
  8. some_value !~ /pattern/ – true, если some_value не соответствует шаблону

Теперь, когда мы рассмотрели различные операторы сравнения в Awk, давайте лучше разберемся в них на примере.

В этом примере у нас есть файл с именем food_list.txt, который представляет собой список покупок для различных продуктов питания, и я хотел бы пометить продукты, количество которых меньше или равно 20, добавив ( **) в конце каждой строки.

No      Item_Name               Quantity        Price
1       Mangoes                    45           $3.45
2       Apples                     25           $2.45
3       Pineapples                 5            $4.45
4       Tomatoes                   25           $3.45
5       Onions                     15           $1.45
6       Bananas                    30           $3.45

Общий синтаксис использования операторов сравнения в Awk:

expression { actions; }

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

# awk '$3 <= 30 { printf "%s\t%s\n", $0,"**" ; } $3 > 30 { print $0 ;}' food_list.txt

No	Item_Name`		Quantity	Price
1	Mangoes	      		   45		$3.45
2	Apples			   25		$2.45	**
3	Pineapples		   5		$4.45	**
4	Tomatoes		   25		$3.45	**
5	Onions			   15           $1.45	**
6	Bananas			   30           $3.45	**

В приведенном выше примере происходят две важные вещи:

  1. Первое выражение { action ; комбинация, $3 <= 30 { printf “%s\t%s\n”, $0”,**” ; печатает строки с количеством, меньшим или равным 30, и добавляет (**) в конце каждой строки. Доступ к значению количества осуществляется с помощью переменной поля $3.
  2. Второе выражение { action ; Комбинация, $3 > 30 { print $0 ; печатает строки без изменений, поскольку их количество превышает 30.

Еще один пример:

# awk '$3 <= 20 { printf "%s\t%s\n", $0,"TRUE" ; } $3 > 20  { print $0 ;} ' food_list.txt 

No	Item_Name		Quantity	Price
1	Mangoes			   45		$3.45
2	Apples			   25		$2.45
3	Pineapples		   5		$4.45	TRUE
4	Tomatoes		   25		$3.45
5	Onions			   15           $1.45	TRUE
6       Bananas	                   30           $3.45

В этом примере мы хотим указать строки с количеством меньше или равным 20 со словом (TRUE) в конце.

Краткое содержание

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

Если у вас возникнут какие-либо проблемы или какие-либо дополнения, которые вы имеете в виду, оставьте комментарий в разделе комментариев ниже. Не забудьте прочитать следующую часть серии статей об Awk, где я познакомлю вас с составными выражениями.