找到与模式匹配的最后一行

时间:2015-07-26 19:38:52

标签: linux bash

我正在运行多个数据收集器脚本,用于从社交平台中提取数据。每个都在自己的日志文件中记录进度。我必须使用ps命令手动监视它们。

我想在bash中创建一个脚本,在执行时告诉我收集器是在运行还是停止。根据我的计划,它将进入日志文件,跳到最后,然后向上搜索日志以获取以下关键字: 1.如果收集器正在运行,则日志文件显示处理行; 2.如果收集器停止,日志文件显示异常;

向上搜索文件以获取上述任何两种情况的最新发生。 我希望它在找到其中任何一个时停止搜索日志文件。 然后我会回应状态。

目前我可以跳到最后然后向上搜索,但如果找到任何一条包含搜索模式的行,我就不知道如何停止搜索。那么 if else 将如何实现呢?

我的代码是

cat **LogFile** | grep -E 'Processing line|Exception' | tail -1

1 个答案:

答案 0 :(得分:0)

# using tac
tac /etc/passwd | awk '/Processing Line/{print "Processing Line found...\n" $0;exit}
                       /Exception/{print "Exception found...\n" $0;exit}'

# Using awk
awk '{line[NR]=$0}         # Store all lines into an array, use NR (line number) as element
 END{for(i=NR;i>0;i--)     # loop through array in reverse
       {if(line[i] ~ /Processing Line/) # Exit on match
          {print "Processing Line found...\n" line[i];exit}
       else if(line[i] ~ /Exception/)
          {print "Exception found...\n" line[i];exit}
       }
    }' /etc/passwd