我需要您的帮助,以用尴尬解析日志文件,以便仅提取必要的信息。我简化了很多东西,可以更明显,而且看起来像这样:
2019-05-22 HH:MM:SS name:Jhon 1 + random_text
LOG_TEXT 1
LOG_TEXT 1
2019-05-22 HH:MM:SS whatever:Jhon 1 + random_text
2019-05-22 HH:MM:SS name:Jhon 2 + random_text
LOG_TEXT 2
LOG_TEXT 2
2019-05-22 HH:MM:SS ANYTHING 2 + random_text
2019-05-22 HH:MM:SS name:Jhon 3 + random_text
LOG_TEXT 3
LOG_TEXT 3
2019-05-22 HH:MM:SS name:Jhon 3 + random_text
详细说明:
总体想法是仅包含"名称:jhon"的过滤线(没有什么:
我在末尾对每行编号,以使3组可能的情况更加可见(日志文本以" whywhewhere:jhon"(未打印1行(结尾;带有通用的DateStamped行"任何东西"(2-线未打印(;或带有"名称:jhon"(3-线打印((
(该功能是VMware vRealize编排器中工作流程的一部分(因此实际的语言是JS,但我可以使用SSH和尴尬(,但我不会深入研究。
我尝试了各种尴尬和正则表达方式,但无法弄清楚。我能得到的最接近的东西与此类似:
awk '/Jhon/{flag=1}/whatever/{flag=0}flag' file.txt
,但这是错误的,因为我认为"任何东西"是固定模式,而且在这种情况下,包含"任何东西"的行都没有被过滤。实际上,"任何东西"one_answers"任何东西"(以及随机_text和time hh:mm:ss(可以是文学的。因此,停止匹配的唯一方法是从日期格式开始在行上停止它(但我无法使用2019年,因为它在每条非Log_text行上使用(。
也尝试了一些JS正则义务,但太复杂了。
最终输出应该看起来像这样:
2019-05-22 HH:MM:SS name:Jhon 1 + random_text
LOG_TEXT 1
LOG_TEXT 1
2019-05-22 HH:MM:SS name:Jhon 2 + random_text
LOG_TEXT 2
LOG_TEXT 2
2019-05-22 HH:MM:SS name:Jhon 3 + random_text
LOG_TEXT 3
LOG_TEXT 3
2019-05-22 HH:MM:SS name:Jhon 3 + random_text
我会尝试这样的事情:
awk '$1 ~ /[0-9]{4}-[0-9]{2}-[0-9]{2}/{if($0~/name:Jhon/){flag=1}else{flag=0}}flag' file.txt
说明:
- a〜/datter/将检查变量
a
是否匹配pattern
- 在您的代码中,您使用了
/Jhon/{flag=1}
。此表达只是$0 ~ /Jhon/{flag=1}
的快捷方式。如果行($ 0(匹配模式/John/
,将执行块 $1 ~ /[0-9]{4}-[0-9]{2}-[0-9]{2}/
表示如果行的第一列匹配日期格式YYYY-mm-dd
(< 4 digits> - < 2数字> - < 2 digits>(awk ' # If first column matches a date format $1 ~ /[0-9]{4}-[0-9]{2}-[0-9]{2}/{ # If the line contains name:Jhon if($0~/name:Jhon/) { flag=1 } else { flag=0 } } # Prints if flag != 0 flag ' file.txt
{flag=1}
。,但是当然,如果log_text从日期开始的某个地方开始,它将失败。
如果log_text始终在2行上,您可以尝试以下操作:
awk '{counter-=1}/name:Jhon/{counter=3}counter>0' file.txt
返回
2019-05-22 HH:MM:SS name:Jhon 1 + random_text
LOG_TEXT 1
LOG_TEXT 1
2019-05-22 HH:MM:SS name:Jhon 2 + random_text
LOG_TEXT 2
LOG_TEXT 2
2019-05-22 HH:MM:SS name:Jhon 3 + random_text
LOG_TEXT 3
LOG_TEXT 3
2019-05-22 HH:MM:SS name:Jhon 3 + random_text