Awk字符串放在括号中

我正在尝试制作一个脚本,以简化阅读日志。我在提取括号中的字符串时遇到了麻烦。

我要提取如下所示的日志的线程ID:

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

我已经尝试过了,但是它会显示CURRENT_DATE

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

如果我使用print $3,它将打印Some random text here部分。

有什么办法可以读取括号中的字符串吗?

colin2625 回答:Awk字符串放在括号中

您可以使用此awk

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

THREAD_ID

-F '\\]\\['将文本][用作分隔符。

,

这个怎么样? (请注意,在OP使用的awk版本中,多个字符定界符似乎 not 分别在GNU awk 4中不可用。)

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

awk -F '[' '{print substr($3,1,length($3)-2)}' <<< "$pattern"
,

awk的不同版本的行为方式不同。在不知道您正在运行什么的情况下,很难说出现有代码为何如此运行。

您已经知道,使用[][]或仅使用[的字段分隔符,每行的开头都有一个空字段。相反,我会尝试这样做:

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

这只是去掉了左方括号,并使用它的伙伴作为您的字段定界符。使用]而不是[的好处是它使$ 1成为您的第一个字段。

本文链接:https://www.f2er.com/3146786.html

大家都在问