Как разрешить Awk использовать переменные оболочки. Часть 11
Когда мы пишем сценарии оболочки, мы обычно включаем в наши сценарии другие более мелкие программы или команды, такие как операции Awk. В случае с Awk нам нужно найти способы передачи некоторых значений из оболочки в операции Awk.
Это можно сделать с помощью переменных оболочки в командах Awk, и в этой части серии мы узнаем, как разрешить Awk использовать переменные оболочки, которые могут содержать значения, которые мы хотим передать командам Awk.
Существует два способа разрешить Awk использовать переменные оболочки:
1. Использование цитирования оболочки
Давайте рассмотрим пример, иллюстрирующий, как на самом деле можно использовать кавычки оболочки для замены значения переменной оболочки в команде Awk. В этом примере мы хотим найти имя пользователя в файле /etc/passwd, отфильтровать и распечатать информацию об учетной записи пользователя.
Поэтому мы можем написать скрипт test.sh
следующего содержания:
#!/bin/bash
#read user input
read -p "Please enter username:" username
#search for username in /etc/passwd file and print details on the screen
cat /etc/passwd | awk "/$username/ "' { print $0 }'
После этого сохраните файл и выйдите.
Интерпретация команды Awk в сценарии test.sh
выше:
cat /etc/passwd | awk "/$username/ "' { print $0 }'
"/$username/ "
– кавычки оболочки, используемые для замены значения переменной оболочки username в команде Awk. Значение имя_пользователя — это шаблон для поиска в файле /etc/passwd.
Обратите внимание, что двойная кавычка находится за пределами сценария Awk: ’{ print $0 }’
.
Затем сделайте скрипт исполняемым и запустите его следующим образом:
chmod +x test.sh
./text.sh
После запуска сценария вам будет предложено ввести имя пользователя, введите действительное имя пользователя и нажмите Ввод. Вы увидите данные учетной записи пользователя из файла /etc/passwd, как показано ниже:
2. Использование назначения переменных Awk
Этот метод намного проще и лучше по сравнению с методом, описанным выше. Учитывая приведенный выше пример, мы можем запустить простую команду для выполнения задания. В этом методе мы используем опцию -v
, чтобы назначить переменную оболочки переменной Awk.
Во-первых, создайте переменную оболочки username
и присвойте ей имя, которое мы хотим найти в файле /etc/passswd
:
username="aaronkilik"
Затем введите команду ниже и нажмите Enter:
cat /etc/passwd | awk -v name="$username" ' $0 ~ name {print $0}'
Объяснение приведенной выше команды:
-v
– опция Awk для объявления переменнойusername
— переменная оболочки.name
– переменная Awk.
Давайте внимательно посмотрим на $0 ~ name
внутри сценария Awk, ' $0 ~ name {print $0}'
. Помните, когда мы рассматривали операторы сравнения Awk в части 4 этой серии, одним из операторов сравнения был шаблон значения ~
, что означает: true, если значение соответствует шаблону.
вывод($0)
команды cat, передаваемый по конвейеру в Awk, соответствует шаблону (aaronkilik)
, который представляет собой имя, которое мы ищем в /etc/passwd. >, в результате операция сравнения верна. Затем на экране печатается строка, содержащая информацию об учетной записи пользователя.
Заключение
Мы рассмотрели важный раздел функций Awk, который может помочь нам использовать переменные оболочки в командах Awk. Часто вам придется писать небольшие программы или команды Awk в сценариях оболочки, и поэтому вам необходимо четко понимать, как использовать переменные оболочки в командах Awk.
В следующей части серии статей об Awk мы углубимся в еще один важный раздел функций Awk, а именно операторы управления потоком. Так что следите за обновлениями и давайте продолжать учиться и делиться.