Unix 按相反顺序匹配awk中的记录

Unix 按相反顺序匹配awk中的记录,unix,awk,Unix,Awk,这是我用来从“我的文件”中提取特定rec的代码: 我的要求是。exDate=last->我的代码的这部分应该存储与我匹配的UST prev的记录。但不幸的是,有时需要检查比赛前的许多记录 因此,简而言之,我需要将“最后一条”记录与“正则表达式”匹配\^[0-9][0-]*\如果它不匹配,那么我需要再向后移动一条记录,直到我的reg-exp匹配为止。如果匹配,我需要将该记录存储在上面提到的变量“exDate”中 到目前为止,我所做的是尝试在awk中设置if条件,但不确定如何越来越多地跟踪,直到re

这是我用来从“我的文件”中提取特定rec的代码:

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

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


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

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

$ 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
$awk'/^[0-9-]*$/{lastDate=$0}
/pattern1/{exDate=lastDate;lastDate=”“}
pattern2/&&exDate{print exDate}'asdf
>asdf
> 2015-11-20
>asdfa
>模式1
>asdfa
>asdfa
>模式2
>asdf
>asdf
>EOF
2015-11-20

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

$ 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
$awk'/^[0-9-]*$/{lastDate=$0}
/pattern1/{exDate=lastDate;lastDate=”“}
pattern2/&&exDate{print exDate}'asdf
>asdf
> 2015-11-20
>asdfa
>模式1
>asdfa
>asdfa
>模式2
>asdf
>asdf
>EOF
2015-11-20

是否只希望将与给定正则表达式匹配的记录存储为“最后一条”?所以只有这样,
{last=$0}
操作才能在您的记录与该表达式匹配时执行,否?我无法获得您所说的内容。但我可以用一个例子来解释我的要求。此外,我还没有在问题中添加正则表达式代码。last是一个awk变量,它将上一条记录提取到匹配项中。如果存在匹配项“/Exception/&&!/ExceptionUnparsable date/”,则它将获取上一行,该行被视为日期。在某些情况下,它是一个日期,在某些情况下,匹配的前一行是日期。在某些情况下,它甚至比以前更重要。简言之,我需要返回,直到检查我匹配的上一条记录是否为dateRight,您将上一行存储在
last
中。每一行都被存储。但是,您不希望每一行都被存储。您只希望存储匹配的行。因此,不要使用无条件的
{last=$0}
操作,而是使用正则表达式模式作为该操作的模式,并且只存储与正则表达式匹配的行<代码>/^[0-9][0-]*/{last=$0}我正在努力,几分钟后肯定会回来。首先,非常感谢你的帮助。它工作得非常好。非常感谢!!但无论如何。有两件事。1.需要在awk中学习很多,仍然困惑,有什么建议吗?2.我需要为这个论坛贡献更多我真的不想只拿但需要回馈你只想将一个匹配给定正则表达式的记录存储为“最后一个”吗?所以只有这样,
{last=$0}
操作才能在您的记录与该表达式匹配时执行,否?我无法获得您所说的内容。但我可以用一个例子来解释我的要求。此外,我还没有在问题中添加正则表达式代码。last是一个awk变量,它将上一条记录提取到匹配项中。如果存在匹配项“/Exception/&&!/ExceptionUnparsable date/”,则它将获取上一行,该行被视为日期。在某些情况下,它是一个日期,在某些情况下,匹配的前一行是日期。在某些情况下,它甚至比以前更重要。简言之,我需要返回,直到检查我匹配的上一条记录是否为dateRight,您将上一行存储在
last
中。每一行都被存储。但是,您不希望每一行都被存储。您只希望存储匹配的行。因此,不要使用无条件的
{last=$0}
操作,而是使用正则表达式模式作为该操作的模式,并且只存储与正则表达式匹配的行<代码>/^[0-9][0-]*/{last=$0}我正在努力,几分钟后肯定会回来。首先,非常感谢你的帮助。它工作得非常好。非常感谢!!但无论如何。有两件事。1.需要在awk中学习很多,仍然困惑,有什么建议吗?2.我需要为这个论坛贡献更多,我真的不想只拿它,但我需要回馈,非常感谢卡拉法。这就是连费多尔基都说的答案。再次感谢你抽出时间。非常感谢卡拉法。这就是连费多尔基都说的答案。再次感谢你抽出时间。