AWK соответствует точной строке внутри квадратных скобок

У меня есть файл, аналогичный приведенным ниже данным.

https://www.test.example.com [503]
https://www.tst.example.com [403]
https://www.tt.example.com [302]

Я хочу получить строки, соответствующие второму столбцу. Например, строки, соответствующие [403], должны печатать только https://www.tst.example.com.

Я попытался избежать квадратных скобок с помощью приведенной ниже команды, которая выдала мне предупреждение.

$ awk -F "$2 == '\[403]\'" file.txt
awk: warning: escape sequence `\[' treated as plain `['
awk: warning: escape sequence `\'' treated as plain `''

Я откатил ваше последнее редактирование. Принципиально менять вопрос после того, как вы получили несколько ответов, недопустимо; это делает эти ответы недействительными и сбивает с толку новых посетителей, помимо несправедливого перемещения к стойкам ворот. Вместо этого (примите один из ответов здесь или отправьте свой собственный и примите его, если хотите, и) задайте новый вопрос с четко изложенными требованиями. (Возможно, постарайтесь объяснить, как вы представляете любые управляющие символы, например, буквальный escape-символ.)

tripleee 26.12.2020 20:14
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
1 096
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы смешиваете регулярные выражения и простые строки. [ — это специальный символ регулярного выражения, но здесь вы не используете регулярное выражение, а просто буквальное сравнение строк. Вам вообще не нужно никакого экранирования (хотя для простоты вы можете изменить использование одинарных и двойных кавычек, если только вы на самом деле не используете Windows).

awk '$2 == "[403]"' file.txt

В основном во всех оболочках Unix двойные кавычки, которые вы использовали, не защищают знаки доллара, поэтому $2 будет заменена оболочкой, возможно, ничем, или же какой-то несвязанной строкой (независимо от того, что было передано в качестве второго аргумента командной строки к оболочке).

Опция -F, если она присутствует, требует аргумента; но на основе данных вашего примера разделитель полей по умолчанию - любая последовательность пробелов - должен работать нормально. Если вы хотите заставить его, например. один пробел, попробуйте -F ' '.

Не могли бы вы попробовать выполнить, написать и протестировать показанные образцы в GNU awk.

awk -F'([[:space:]]*)?\\[|\\]([[:space:]]*)?' '$2= = "403"{print $1}' Input_file

Объяснение: установка разделителя полей в виде пробелов (необязательно)[ ИЛИ [пробелов (необязательно) для всех строк. Затем проверьте, является ли второе поле 403, затем напечатайте первое поле в соответствии с запросом OP.

ИТИМ -F'([[:space:]]*\\[)|(][[:space:]]*)'

Ed Morton 25.12.2020 16:27

@EdMorton, счастливого Рождества, сэр, спасибо, что всегда направляете, да благословит вас БОГ :)

RavinderSingh13 25.12.2020 16:30

Вас тоже с Рождеством и с Новым годом (или, как говорят шотландцы, Гвид Хогманай), когда он наступит!

Ed Morton 25.12.2020 16:31

Будет делать то, что вы хотите, с тем преимуществом, что вы можете передать желаемый код в качестве аргумента, а не жестко запрограммировать его в сценарии awk.

awk -v http_code=403 '$2 == "["http_code"]"' file.txt

Другие вопросы по теме