В этой статьи мы углубимся в команду next и посмотрим, как ее можно использовать для оптимизации выполнения вашего скрипта, поскольку эта команда особенно полезна для пропуска ненужных шагов при обработке ваших данных.
Команда next в awk сообщает ему пропустить оставшиеся шаблоны и действия для текущей строки и перейти к следующей строке ввода. Это может помочь избежать выполнения избыточных или ненужных шагов, делая ваши скрипты более эффективными.
Давайте начнем с практического примера, рассмотрев файл с именем food_list.txt со следующим содержимым.
Food List Items No Item_Name Price Quantity 1 Mangoes $3.45 5 2 Apples $2.45 25 3 Pineapples $4.45 55 4 Tomatoes $3.45 25 5 Onions $1.45 15 6 Bananas $3.45 30
Рассмотрите возможность запуска следующей команды, которая будет помечать продукты питания, количество которых меньше или равно 20, со знаком (*)
в конце каждой строки:
awk '$4 <= 20 { printf "%s\t%s\n", $0,"*" ; } $4 > 20 { print $0 ;}' food_list.txt
Приведенная выше команда на самом деле работает следующим образом:
(*)
знаком в конце с использованием выражения one: $4 <= 20
$4 > 20
.
{ printf "%s\t%s\n", $0,"**" ; }
а затем на том же шаге также проверяется второе выражение, что приводит к потере времени.Таким образом, нет необходимости выполнять второе выражение $4 > 20
снова после печати уже отмеченных строк, которые были напечатаны с использованием первого выражения.
Чтобы справиться с этой проблемой, вы должны использовать команду next
следующим образом:
awk '$4 <= 20 { printf "%s\t%s\n", $0,"*" ; next; } $4 > 20 { print $0 ;}' food_list.txt
Вот как это работает:
$4 <= 20
, она выводит строку со звездочкой, а затем пропускает оставшиеся действия для этой строки, переходя непосредственно к следующей строке.$4 >l 20
условия для уже обработанных строк.
Рассмотрим файл data.txt со следующим содержимым:
ID Name Age Score 1 Alice 30 85 2 Bob 25 90 3 Charlie 35 70 4 David 28 92
Если вы хотите печатать только записи с результатом выше 80 и форматировать их как “Name: [Name], Score: [Score]“, используйте:
awk '$4 > 80 { printf "Name: %s, Score: %d\n", $2, $4; next; }' data.txt
Использование команды next в awk — это мощный способ оптимизировать обработку данных, избегая ненужных вычислений. Пропуская остальную часть скрипта для строк, которые уже были обработаны, вы делаете свои awk-скрипты более эффективными и быстрыми.