通过逆序匹配awk中的记录

时间:2015-11-20 13:48:10

标签: unix awk

这是我用来从“my_file”中提取某些rec的代码:

awk '/Exception/ && !/ExceptionUnparseable date/ {
       haveEx="yes"; ex=$0; **exDate=last**}
     haveEx && /tms/ {
       print exDate; print ex; haveEx=""}
     {last = $0} ' my_file

我的要求是。 exDate = last - >我的代码的这部分应该存储到我的匹配中的记录。但不幸的是,有时需要检查比赛中的许多记录。

所以简而言之我需要将“最后”记录与“正则表达式”匹配\ ^ [0-9] [0 - ] * \如果它不匹配,那么我需要向后移动一个记录,比如直到我的reg - exp匹配。如果匹配我需要将该记录存储在变量“exDate”中,如上所述。

到目前为止我所做的是尝试在awk中设置if条件,但不确定如何在req匹配之前跟踪越来越多。

1 个答案:

答案 0 :(得分:3)

您可以独立于其他模式匹配存储日期模式,并在满足该模式后进行打印。这样您就不需要回搜索了。如果我正确理解你的问题,这应该有用

$ awk '/^[0-9-]*$/{lastDate=$0} 
        /pattern1/{exDate=lastDate; lastDate=""} 
 pattern2/&&exDate{print exDate}' << EOF
> asdf
> asdf
> 2015-11-20
> asdfa
> pattern1
> asdfa
> asdfa
> pattern2
> asdf
> asdf
> EOF
2015-11-20