匹配多个模式后,使用awk或sed从文件中分离结果

普拉松

从我们的包含一堆INFO消息和系统输出行的应用程序日志中,我希望能够提取2种模式中包含的行,然后从结果行中的其他行中具体获取值。

这是我的输入文件

2019-08-16 00:38:29,171 1065142892 [http-bio-8443-exec-146] INFO aaaaa
2019-08-16 00:38:29,172 1065142893 [http-bio-8443-exec-146] INFO bbbbb
              'This is the matching pattern'
tag1: value1
tag2: value2
tag3: value3
'this is the end pattern' xxxyyyzzz

2019-08-16 00:39:29,171 1065142992 [http-bio-8443-exec-146] INFO aaaaa
2019-08-16 00:39:29,172 1065142993 [http-bio-8443-exec-146] INFO bbbbb
              'This is the matching pattern'
tag1: valuea
tag2: valueb
tag3: valuec
'this is the end pattern' xxxyyyzzzadasd

2019-08-16 00:38:29,171 1065142892 [http-bio-8443-exec-146] INFO aaaaa
2019-08-16 00:38:29,172 1065142893 [http-bio-8443-exec-146] INFO bbbbb
              'This is the matching pattern'
tag1: valuep

2019-08-16 01:38:29,171 1065153992 [http-bio-8443-exec-146] INFO aaaaa
2019-08-16 01:38:29,172 1065153993 [http-bio-8443-exec-146] INFO bbbbb
              'This is the matching pattern1'
tag1: valuexx
tag2: valueyy
tag3: valuezz
'this is the end pattern' xxxyyyzzzadasdqwerty

从这里,我想通过以下方式提取输出:

输出:

value1, value2
valuea, valueb
valuexx, valueyy

我尝试使用以下内容过滤结果

awk '/This is the matching pattern/,/This is the end pattern/' logfile
OR
awk ' /This is the matching pattern/{flag=1;next}/This is the end pattern/{flag=0}flag' logfile
OR
sed -n -e '/This is the matching pattern/,/this is the end pattern/{ /This is the matching pattern/d; /this is the end pattern/d; p; }'  logfile

但是这些将tag1:valuep带入了没有匹配的结束模式的输出中。

埃德·莫顿

从您的示例来看,没有理由要测试This is the matching pattern,而只需结束regexp即可:

$ cat tst.awk
BEGIN { FS=": "; OFS=", " }
{ f[$1] = $2 }
/this is the end pattern/ {
    print f["tag1"], f["tag2"]
    delete f
}

$ awk -f tst.awk file
value1, value2
valuea, valueb
valuexx, valueyy

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在多个文件中匹配模式后,使用 sed/cat 从 1 个文件添加文本

使用Awk / Sed替换文件中匹配模式的值

匹配后使用sed或awk替换行

如何使用 awk sed 或 cut 命令在匹配模式后打印一行

如何使用awk匹配多个变量模式?

使用sed或awk,将行匹配模式移动到文件底部

使用SED或AWK复制与xml文件中两个不同模式匹配的两行

grep/sed/awk 解析文本文件以在模式匹配后打印多行并转换为一行

模式匹配/排除(awk / sed)

如何使用sed \ awk在文件中查找某些行,然后匹配与其他模式匹配的所有后续行?

grep多个模式并使用匹配模式打印结果

使用 awk/sed 在与模式匹配的块中打印文本

awk匹配中的多个模式

使用sed或awk删除模式后的所有内容

如何使用sed或awk删除模式后的某些字符?

使用sed在模式匹配后打印前一行?

使用 awk 完成模式匹配后如何打印新行

使用 sed 进行多个匹配而不是匹配整个文件

如何使用 find 或 sed 在多个文件中搜索多个模式

文件中的awk匹配模式

每个匹配模式后的sed / AWK搜索/替换字符串

在csv中分离组-使用tkinter显示结果

使用python在数组中分离活动网页的抓取结果

使用sed匹配模式并从行删除到文件末尾

使用sed从文件中删除与模式不匹配的行

从文件开始到使用sed的模式匹配行进行注释

匹配模式并使用awk或grep打印文件中的相应列

使用awk或sed消除多个文件中的重复行

使用 awk 列出匹配模式