Как использовать операторы управления потоком в Awk. Часть 12
Когда вы просмотрите все примеры Awk, которые мы рассмотрели до сих пор, с самого начала серии Awk, вы заметите, что все команды в различных примерах выполняются последовательно, то есть одна за другой. Но в определенных ситуациях нам может потребоваться выполнить некоторые операции фильтрации текста на основе некоторых условий, и именно здесь применяется подход операторов управления потоком.
В программировании на Awk существуют различные операторы управления потоком, в том числе:
- оператор if-else
- для заявления
- оператор while
- заявление «делать пока»
- оператор разрыва
- продолжить заявление
- следующее заявление
- оператор следующего файла
- заявление о выходе
Однако в рамках этой серии мы остановимся на следующих вопросах: if-else
, for
, while
и do while
операторы. Помните, что мы уже рассмотрели, как использовать оператор next в части 6 этой серии статей об Awk.
1. Оператор if-else
Ожидаемый синтаксис оператора if
аналогичен синтаксису оператора if оболочки:
if (condition1) {
actions1
}
else {
actions2
}
В приведенном выше синтаксисе condition1
и condition2
— это выражения Awk, а actions1
и actions2
— это команды Awk, выполняемые, когда соответствующие условия соблюдены.
Когда условие1 удовлетворено, то есть оно истинно, выполняется actions1 и завершается выполнение оператор if, в противном случае выполняется actions2. казнён.
Оператор if также можно расширить до оператора if-else_if-else
, как показано ниже:
if (condition1){
actions1
}
else if (conditions2){
actions2
}
else{
actions3
}
В приведенной выше форме, если условие1 истинно, то actions1 выполняется и оператор if завершается, в противном случае условие2 оценивается, и если оно истинно, то actions2 выполняется и оператор if завершается. Однако если condition2 ложно, actions3 выполняется и оператор if завершается.
Вот пример использования операторов if. У нас есть список пользователей и их возраст, хранящийся в файле users. .txt.
Мы хотим напечатать заявление, указывающее имя пользователя и возраст пользователя меньше или больше 25 лет.
aaronkilik@tecMint ~ $ cat users.txt
Sarah L 35 F
Aaron Kili 40 M
John Doo 20 M
Kili Seth 49 M
Мы можем написать короткий сценарий оболочки для выполнения нашей работы, описанной выше. Вот содержимое сценария:
#!/bin/bash
awk ' {
if ( $3 <= 25 ){
print "User",$1,$2,"is less than 25 years old." ;
}
else {
print "User",$1,$2,"is more than 25 years old" ;
}
}' ~/users.txt
Затем сохраните файл и выйдите, сделайте скрипт исполняемым и запустите его следующим образом:
chmod +x test.sh
./test.sh
Пример вывода
User Sarah L is more than 25 years old
User Aaron Kili is more than 25 years old
User John Doo is less than 25 years old.
User Kili Seth is more than 25 years old
2. Оператор for
Если вы хотите выполнить некоторые команды Awk в цикле, то оператор for предлагает вам подходящий способ сделать это с помощью приведенного ниже синтаксиса:
Здесь подход просто определяется использованием счетчика для управления выполнением цикла: сначала вам нужно инициализировать счетчик, затем запустить его по тестовому условию, если оно истинно, выполнить действия и, наконец, увеличить счетчик. Цикл завершается, когда счетчик не удовлетворяет условию.
for ( counter-initialization; test-condition; counter-increment ){
actions
}
Следующая команда Awk показывает, как работает оператор for, где мы хотим напечатать числа 0–10:
awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }'
Пример вывода
0
1
2
3
4
5
6
7
8
9
10
3. Оператор while
Обычный синтаксис оператор while следующий:
while ( condition ) {
actions
}
Условие — это выражение Awk, а действия — это строки команд Awk, выполняемые, когда условие истинно.
Ниже приведен сценарий, иллюстрирующий использование оператор while для печати чисел 0–10:
#!/bin/bash
awk ' BEGIN{ counter=0 ;
while(counter<=10){
print counter;
counter+=1 ;
}
}
Сохраните файл и сделайте скрипт исполняемым, затем запустите его:
chmod +x test.sh
./test.sh
Пример вывода
0
1
2
3
4
5
6
7
8
9
10
4. Оператор do while
Это модификация приведенного выше оператор while со следующим базовым синтаксисом:
do {
actions
}
while (condition)
Небольшое отличие состоит в том, что в разделе do while команды Awk выполняются до оценки условия. Используя сам пример из оператор while выше, мы можем проиллюстрировать использование do while, изменив команду Awk в сценарии test.sh следующим образом: следует:
#!/bin/bash
awk ' BEGIN{ counter=0 ;
do{
print counter;
counter+=1 ;
}
while (counter<=10)
}
'
После изменения сценария сохраните файл и выйдите. Затем сделайте скрипт исполняемым и выполните его следующим образом:
chmod +x test.sh
./test.sh
Пример вывода
0
1
2
3
4
5
6
7
8
9
10
Заключение
Это не полное руководство по операторам управления потоком Awk, поскольку, как я уже упоминал ранее, в Awk есть несколько других операторов управления потоком.
Тем не менее, эта часть серии статей об Awk должна дать вам четкое фундаментальное представление о том, как можно контролировать выполнение команд Awk в зависимости от определенных условий.
Вы также можете подробнее рассказать об остальных операторах управления потоком, чтобы лучше понять предмет. Наконец, в следующем разделе серии статей об Awk мы перейдем к написанию сценариев Awk.