AWK находит точное совпадение из переменной среды

#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. по какой-то причине он все равно не найдет его с == помощью . Понятия не имею, почему, это все, что есть в этом разделе string

2. В ваших данных есть пробелы, а не только запятые. Сделайте это -F',[[:space:]]*'