如何获取每个作业的最后匹配行(awk)

如何获取每个作业的最后匹配行(awk),awk,Awk,我试图提取每个作业的最后一行(例如,行中的2或6/第一位数字),该行应包含文本“LOADER\u PROCESSED\u COUNT”。 使用下面的代码,我可以得到最后一行字符串,如下所示。但是,我需要打印每个作业的最后一行 你能就这件事给我建议吗 @代码 awk '/LOADER_PROCESSED_COUNT/ {a=$0} END{print a}' tempResult @结果 6/Loader.log/LOADER_PROCESSED_COUNT/99999 @输入文件(te

我试图提取每个作业的最后一行(例如,行中的2或6/第一位数字),该行应包含文本“LOADER\u PROCESSED\u COUNT”。 使用下面的代码,我可以得到最后一行字符串,如下所示。但是,我需要打印每个作业的最后一行

你能就这件事给我建议吗

@代码

awk  '/LOADER_PROCESSED_COUNT/ {a=$0} END{print a}'  tempResult 
@结果

6/Loader.log/LOADER_PROCESSED_COUNT/99999
@输入文件(tempResult)

@预期结果

2/Loader.log/LOADER_PROCESSED_COUNT/100000
6/Loader.log/LOADER_PROCESSED_COUNT/99999
那么:

awk 'BEGIN{ FS = "/" } $0 ~ /LOADER_PROCESSED_COUNT/{ a[$1] = $0 }END{ for (i in a) print a[i] } file
输出:

6/Loader.log/LOADER_PROCESSED_COUNT/99999
2/Loader.log/LOADER_PROCESSED_COUNT/100000
那么:

awk 'BEGIN{ FS = "/" } $0 ~ /LOADER_PROCESSED_COUNT/{ a[$1] = $0 }END{ for (i in a) print a[i] } file
输出:

6/Loader.log/LOADER_PROCESSED_COUNT/99999
2/Loader.log/LOADER_PROCESSED_COUNT/100000

如果
Loader.log
部分也可以是变量,则此行可能有助于:

 awk '/LOADER_PROCESSED_COUNT/{t=$0;sub(/\/[^/]*$/,"",t);a[t]=$0} 
      END{for(x in a)print a[x]}' file

注意:输出中的行顺序可能不会保留。

如果加载程序.log的部分也可以是可变的,则此行可能有助于:

 awk '/LOADER_PROCESSED_COUNT/{t=$0;sub(/\/[^/]*$/,"",t);a[t]=$0} 
      END{for(x in a)print a[x]}' file

注意,输出中的行顺序可能不会保留。

使用
tac/tac
帮助,您可以找到第一个实例并保留顺序

tac file | 
awk -F'/' '/LOADER_PROCESSED_COUNT/ && !a[$1]++' | 
tac

2/Loader.log/LOADER_PROCESSED_COUNT/100000
6/Loader.log/LOADER_PROCESSED_COUNT/99999

使用
tac/tac
帮助,您可以找到第一个实例,并保留订单

tac file | 
awk -F'/' '/LOADER_PROCESSED_COUNT/ && !a[$1]++' | 
tac

2/Loader.log/LOADER_PROCESSED_COUNT/100000
6/Loader.log/LOADER_PROCESSED_COUNT/99999

尝试:如果您的输入文件与所示的示例相同,并且ID(第一个字段)顺序正确,那么下面的内容也可能对您有所帮助

awk -F"/" '/LOADER_PROCESSED_COUNT/{VAL=$0;} VAR != $1 && VAR{print VAL} {VAR=$1} END{print VAL}'  Input_file

将字段分隔符设置为/然后查找字符串加载器\u PROCESSED\u COUNT,如果是,则创建一个名为VAL的变量并将行的值保存在其中。然后检查VAR不等于$1且VAR不为NULL的条件,然后打印名为VAL的变量。在每行读取的末尾将变量VAL分配给$1,以便下次比较。然后在最后一节中也块打印VAL的值。

尝试:如果您的输入文件与显示的示例相同,并且ID(第一个字段)顺序正确,则以下内容也可能对您有所帮助

awk -F"/" '/LOADER_PROCESSED_COUNT/{VAL=$0;} VAR != $1 && VAR{print VAL} {VAR=$1} END{print VAL}'  Input_file

将字段分隔符设置为/然后查找字符串加载器\u PROCESSED\u COUNT,如果是,则创建一个名为VAL的变量并将行的值保存在其中。然后检查VAR不等于$1且VAR不为NULL的条件,然后打印名为VAL的变量。在每行读取的末尾将变量VAL分配给$1,以便下次比较。然后在最后一节中也块打印VAL的值。

$0~
缺失时暗示。
$0~
缺失时暗示。为什么不信任字段分隔符?感谢您的解决方案。世界上有这么多伟大的人。@karakfa我认为每个“领域”都可能不同,所以如果我取
$x
,我必须比较它们,或者将它们组合在一起。而且,使用
sub(…)
我不必关心
OFS
…如果不覆盖字段,则不需要重建行,也不需要
OFS
。但是,我想一些
awk
s可能…为什么不信任字段分隔符呢?谢谢你的解决方案。世界上有这么多伟大的人。@karakfa我认为每个“领域”都可能不同,所以如果我取
$x
,我必须比较它们,或者将它们组合在一起。而且,使用
sub(…)
我不必关心
OFS
…如果不覆盖字段,则不需要重建行,也不需要
OFS
。但是,我想一些
awk
s可能…“tac”谢谢谢谢你!