В этой шестой части AWK серия, мы рассмотрим использование следующий
команда, которая сообщает Awk чтобы пропустить все оставшиеся шаблоны и выражения, которые вы предоставили, а вместо этого прочитать следующую строку ввода.
В следующий
command помогает предотвратить выполнение того, что я бы назвал этапами, которые тратят впустую время при выполнении команды.
Чтобы понять, как это работает, давайте рассмотрим файл с именем food_list.txt это выглядит так:
Пункты списка продуктов питания
No Item_Name Цена Количество. 1 манго $ 3,45 5. 2 яблока $ 2,45 25. 3 ананаса 4,45 $ 55. 4 Помидора $ 3,45 25. 5 луковиц 1,45 $ 15. 6 бананов $ 3,45 30.
Рассмотрите возможность выполнения следующей команды, которая будет отмечать продукты питания, количество которых меньше или равно 20 с (*)
знак в конце каждой строки:
# awk '$ 4 <= 20 {printf "% s \ t% s \ n", $ 0, "*"; } $ 4> 20 {print $ 0;} 'food_list.txt No Item_Name Цена Количество. 1 манго $ 3,45 5* 2 яблока $ 2,45 25. 3 ананаса 4,45 $ 55. 4 помидора 3,45 $ 25 5 луковиц 1,45 $ 15* 6 бананов $ 3,45 30.
Приведенная выше команда на самом деле работает следующим образом:
(*)
знак в конце, используя выражение один: $4 <= 20
$4 > 20
Но здесь есть одна проблема, когда первое выражение выполняется, строка, которую мы хотим отметить, печатается с использованием: {printf "% s \ t% s \ n", $ 0, "**"; }
а затем на том же этапе второе выражение также проверяется, что становится фактором потери времени.
Таким образом, нет необходимости выполнять второе выражение, $4 > 20
снова после печати уже отмеченных строк, которые были напечатаны с использованием первого выражения.
Чтобы справиться с этой проблемой, вы должны использовать следующий
команду следующим образом:
# awk '$ 4 <= 20 {printf "% s \ t% s \ n", $ 0, "*"; следующий; } $ 4> 20 {print $ 0;} 'food_list.txt No Item_Name Цена Количество. 1 манго $ 3,45 5* 2 яблока $ 2,45 25. 3 ананаса 4,45 $ 55. 4 помидора 3,45 $ 25 5 луковиц 1,45 $ 15* 6 бананов $ 3,45 30.
После того, как одна строка ввода будет напечатана с использованием $4 <= 20
{printf "% s \ t% s \ n", $ 0, "*"; следующий; }
, то следующий
включенная команда поможет пропустить второе выражение $4 > 20
{print $ 0;}
, поэтому выполнение переходит к следующей строке ввода, не тратя время на проверку того, превышает ли количество 20.
В следующий Команда очень важна для написания эффективных команд, и при необходимости вы всегда можете использовать ее для ускорения выполнения скрипта. Приготовьтесь к следующей части серии, где мы рассмотрим использование стандартного ввода. (STDIN) как вход для Awk.
Надеюсь, вы найдете это руководство полезным и, как всегда, сможете изложить свои мысли в письменной форме, оставив комментарий в разделе комментариев ниже.