Awk строки заключены в скобки - PullRequest
0 голосов
/ 07 ноября 2019

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

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

[CURRENT_DATE][THREAD_ID][PROCESS_NAME]Some random text here

Я пробовал это, но он печатает CURRENT_DATE:

awk -F '[][]' '{print $2}'

Если я использую print $3, он печатает часть Some random text here.

Можно ли как-нибудь прочитать строку, заключенную в скобки?

Ответы [ 3 ]

1 голос
/ 07 ноября 2019

Вы можете использовать это awk:

s='[CURRENT_DATE][THREAD_ID][PROCESS_NAME]Some random text here'
awk -F '\\]\\[' '{print $2}' <<< "$s"

THREAD_ID

-F '\\]\\[' сделает текст ][ разделителем.

0 голосов
/ 07 ноября 2019

Различные версии awk ведут себя по-разному. Не зная, что вы запускаете, трудно сказать, почему ваш существующий код ведет себя так, как он.

Вы уже знаете, что с разделителем полей [][] или просто [ у вас есть пустое полев начале каждой строки. Вместо этого я бы попробовал это:

awk -F']' '{gsub(/\[/,""); print $2}' input.log

Это просто убирает левую квадратную скобку и использует ее собеседника в качестве разделителя поля. Преимущество использования ] вместо [ состоит в том, что оно делает $ 1 вашим первым полем.

0 голосов
/ 07 ноября 2019

Как насчет этого? (Обратите внимание, что разделители нескольких символов кажутся не доступными в GNU awk 4 соответственно в версии awk, которую использует OP.)

pattern='[CURRENT_DATE][THREAD_ID][PROCESS_NAME]Some random text here'
echo $pattern

awk -F '[' '{print substr($3, 1, length($3)-2)}' <<< "$pattern"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...