我正在尝试提取每个作业的最后一行(例如,行中的2或6 /第一个数字),该行应包含文本' LOADER_PROCESSED_COUNT'。 使用下面的代码,我可以得到总字符串的最后一行,如下所示。但是,我需要打印每个作业的最后一行。
你能就此事向我提出建议吗?
@ code
awk '/LOADER_PROCESSED_COUNT/ {a=$0} END{print a}' tempResult
@ Result
6/Loader.log/LOADER_PROCESSED_COUNT/99999
@输入文件(tempResult)
2/Loader.log/LOADER_PROCESSED_COUNT/99999
2/Loader.log/LOADER_PROCESSED_COUNT/99999
2/Loader.log/LOADER_PROCESSED_COUNT/99999
2/Loader.log/LOADER_PROCESSED_COUNT/99999
2/Loader.log/LOADER_PROCESSED_COUNT/99999
2/Loader.log/LOADER_PROCESSED_COUNT/99999
2/Loader.log/LOADER_PROCESSED_COUNT/99999
2/Loader.log/LOADER_PROCESSED_COUNT/100000
2/Loader.log/LOADER_COMPLETED
6/Loader.log/LOADER_START
6/Loader.log/LOADER_PROCESSED_COUNT/0
6/Loader.log/LOADER_PROCESSED_COUNT/0
6/Loader.log/LOADER_PROCESSED_COUNT/0
6/Loader.log/LOADER_PROCESSED_COUNT/95882
6/Loader.log/LOADER_PROCESSED_COUNT/99999
6/Loader.log/LOADER_PROCESSED_COUNT/99999
@预期结果
2/Loader.log/LOADER_PROCESSED_COUNT/100000
6/Loader.log/LOADER_PROCESSED_COUNT/99999
答案 0 :(得分:1)
怎么样:
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
答案 1 :(得分:1)
如果Loader.log
部分也可以变量,则此行可能会有所帮助:
awk '/LOADER_PROCESSED_COUNT/{t=$0;sub(/\/[^/]*$/,"",t);a[t]=$0}
END{for(x in a)print a[x]}' file
请注意,输出中的行顺序可能不会保留。
答案 2 :(得分:1)
使用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
答案 3 :(得分:1)
尝试:如果您的Input_file与显示的样本相同,并且ids(第一个字段)按顺序排列,那么以下内容也可以帮助您。
awk -F"/" '/LOADER_PROCESSED_COUNT/{VAL=$0;} VAR != $1 && VAR{print VAL} {VAR=$1} END{print VAL}' Input_file
将字段分隔符设置为/然后查找字符串LOADER_PROCESSED_COUNT,如果是,则创建名为VAL的变量并在其中保存行的值。然后检查VAR不等于$ 1且VAR为NOT NULL的条件,然后打印名为VAL的变量。在每行读取结束时将变量VAL分配给$ 1,以便我们下次比较它。然后在END部分块中打印VAL的值。