我正在尝试使用gawk从日志中提取段落,它正在完美地工作到我想要包含它找到的记录分隔符的位置。
这是命令:
gawk --re-interval 'BEGIN{RS="[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}.[0-9]{1,6} \\[[A-Z]*\\]";} /983a99f8-bec6-11e1-80dd-059a821d0b73/ {print $0}' full.log
如果我添加打印RT $ 0,它会打印下一场比赛的RT,而不是当前比赛。
这是一些示例文本
9:08:06.899627 [DEBUG] <0.30065.3>@agent:1565 Recs to loop through: [{agent_state,"OpenAcdAgent43","Jeff",
undefined,wrapup,
{call,"983a99f8-bec6-11e1-80dd-059a821d0b73",
voice,
{"8501112234","MorganGrimes"},
"9201",<0.30392.3>,[],
{client,"8221314","DCF",[],1340629596,
1340629596},
[creole_general],
<0.30398.3>,outband,inband,inbound,10},
1340629658,undefined,"Default",1340629658
9:08:06.899707 [INFO] <0.168.0>@cpx_monitor:649 Down message for reference #Ref<0.0.16.137225> of <0.30064.3> due to normal
我想成为9:08:06.899627 [DEBUG]能够做到的是在我的比赛前9:08:06.899627 [DEBUG],但RS取消了。我得到了9:08:06.899707 [INFO]。
谢谢!
答案 0 :(得分:5)
这是因为记录分隔符位于记录的结束。因此9:08:06.899627 [DEBUG]
是空记录的结尾,9:08:06.899707 [INFO]
是与GUID正则表达式匹配的记录的结尾。
您需要保存之前的RT
并输出已保存的文件。
gawk --re-interval 'BEGIN{RS="[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}.[0-9]{1,6} \\[[A-Z]*\\]";} /983a99f8-bec6-11e1-80dd-059a821d0b73/ {print savedRT, $0} {savedRT = RT}' full.log