这是我使用从“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 - >我的代码的这一部分应该存储记录,这个记录对我的匹配来说是prevust。但不幸的是有时需要检查比赛前的许多记录。
所以总之,我需要匹配“最后”记录到“正则表达式”\^[0-9] [0 - ] * \如果它不匹配,那么我需要向后移动一条记录,比如直到我的reg - exp比赛。如果它的匹配我需要将该记录存储在变量“exDate”中,如上所述。
我到目前为止所做的事情是尝试在awk中放入一个if条件,但不知道如何追踪越来越多,直到req匹配。
你只想存储一个匹配给定的正则表达式的记录“最后”?所以只有当你的记录与该表达式匹配时,“{last = $ 0}”动作,不是? –
我无法得到你所说的。但我可以用一个例子来解释我的要求。此外,我还没有在问题中添加正则表达式代码。 last是一个awk变量,它将前一条记录提交给匹配。 如果匹配“/ Exception/&&!/ ExceptionUnparseable date /”,那么它将获取上一行作为日期。 在某些情况下它是一个日期,在某些情况下,前一个匹配的行是日期。在某些情况下甚至更早。总之我需要回去,直到检查我的匹配的前一条记录是一个日期 –
正确的是,您将上一行保存在'last'中。 *每条*行都被存储。你不希望每一行都被存储。你只需要*匹配*行来存储。因此,不要使用无条件的'{last = $ 0}'操作,将您的正则表达式模式用作该操作的模式,并且只存储与您的正则表达式匹配的行。 '/^[0-9] [0 - ] */{最后= $ 0}' –