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

Как разрешить 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}'

Объяснение приведенной выше команды:

  1. -v – опция Awk для объявления переменной
  2. username — переменная оболочки.
  3. name – переменная Awk.

Давайте внимательно посмотрим на $0 ~ name внутри сценария Awk, ' $0 ~ name {print $0}'. Помните, когда мы рассматривали операторы сравнения Awk в части 4 этой серии, одним из операторов сравнения был шаблон значения ~, что означает: true, если значение соответствует шаблону.

вывод($0) команды cat, передаваемый по конвейеру в Awk, соответствует шаблону (aaronkilik), который представляет собой имя, которое мы ищем в /etc/passwd. >, в результате операция сравнения верна. Затем на экране печатается строка, содержащая информацию об учетной записи пользователя.

Заключение

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

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