#bash #awk
#баш #awk
Вопрос:
Я хотел бы знать, как я могу использовать AWK, чтобы найти точное соответствие переменной окружения.
Моя переменная окружения — это ESSID="Super asdf"
Мой файл, который также является переменной ( $AIRODUMP_2G_LOG
), содержит следующие две строки (среди многих других):
E4-7A-19-80-01-CC, 2020-11-16 08:58:07, 2020-11-16 08:58:35, 8, 54, WPA2, CCMP, PSK, -81, 81, 5, 0. 0. 0. 0, 14, Super asdf,
EE-80-6B-70-C1-EF, 2020-11-16 08:58:07, 2020-11-16 08:58:36, 8, 54, WPA2, CCMP TKIP, PSK, -81, 79, 0, 0. 0. 0. 0, 18, Super asdf_EXT,
В настоящее время моя функция поиска AWK сводится к следующему:
awk -F, '($14 ~ ENVIRON["ESSID"]) {print $0}' $AIRODUMP_2G_LOG
С помощью этой функции поиска будут показаны обе эти строки, показанные выше, но я действительно хочу только ту, которая отсутствует _EXT
в конце. Ни за что на свете я не могу понять, как использовать функцию поиска, где она заканчивается ( $
), просто Super asdf
используя мою переменную среды. Я знаю, что если я изменю свою функцию поиска awk -F, '$14 ~ /f$/ {print $14}' "$AIRODUMP_2G_LOG"
, она будет работать, но вместо этого я хочу использовать env-var внутри AWK.
РЕДАКТИРОВАТЬ: Извините, мой код должен был быть $14 == ENVIRON["ESSID"]
таким, как описано в комментарии ниже.
Комментарии:
1.
{print $0}
это действие awk по умолчанию, когда задано только условие; таким образом, вы можете просто оставить его.2. На самом деле я хотел напечатать 1 и 4, но я опустил это перед написанием вопроса. не слишком уверен, почему я был отмечен, хотя, возможно, мне следовало упомянуть, что
==
это не сработало для меня?3. Не мой минус; не могу сказать. Не беспокойтесь о случайном случайном, необъяснимом понижении — помните, что каждый повышающий голос зарабатывает намного больше репутации, чем стоит понижающий.
Ответ №1:
Переключитесь с ~
на ==
, когда вы хотите получить точное совпадение.
awk -F',[[:space:]]*' '$14 == ENVIRON["ESSID"]' "$AIRODUMP_2G_LOG"
Комментарии:
1. по какой-то причине он все равно не найдет его с
==
помощью . Понятия не имею, почему, это все, что есть в этом разделе string2. В ваших данных есть пробелы, а не только запятые. Сделайте это
-F',[[:space:]]*'