如何获取每个作业的最后匹配行(awk)
我试图提取每个作业的最后一行(例如,行中的2或6/第一位数字),该行应包含文本“LOADER\u PROCESSED\u COUNT”。 使用下面的代码,我可以得到最后一行字符串,如下所示。但是,我需要打印每个作业的最后一行 你能就这件事给我建议吗 @代码如何获取每个作业的最后匹配行(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
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”谢谢谢谢你!