微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Unix帮助提取/打印每个第三个出现模式之后的50行直到文件结束

我需要帮助提取/打印4行后每隔3次出现模式,直到文件结束。 下面考虑一下日志文件的例子

ERROR_FILE_NOT_FOUND ERROR_FILE_NOT_FOUND ERROR_FILE_NOT_FOUND Extract line 1 Extract line 2 Extract line 3 Extract line 4 ERROR_FILE_NOT_FOUND ERROR_FILE_NOT_FOUND ERROR_FILE_NOT_FOUND Extract line 5 Extract line 6 Extract line 7 Extract line 8 ERROR_FILE_NOT_FOUND ERROR_FILE_NOT_FOUND ERROR_FILE_NOT_FOUND Extract line 9 Extract line 10 Extract line 11 Extract line 12

cygwin curl,Wget,wget和top“找不到命令”

windows批处理,在嵌套循环内设置一个variables

stream水线如何工作?

我想发送短信使用命令和PHP从我的胜利8 oS

为什么du和Perl的文件大小不一样?

只需使用一些标志来跟踪出现的次数次数

awk -v patt="ERROR_FILE_NOT_FOUND" 'lines==3 {print; appeared++} appeared==4 {lines=0;appeared=0} patt~$0 {lines++}' file

说明

这使得加载lines数匹配。 一旦达到3 ,开始打印。 它正好打印4次。

-v patt="ERROR_FILE_NOT_FOUND"这提供了要查看的模式

lines==3 {print; appeared++} lines==3 {print; appeared++}如果计数器lines是3 ,则打印行并开始计算出现了多少行。

如果已经打印的行数已经是4 ,则appeared==4{lines=0;appeared=0} ,将标志重置为0 。

patt~$0 {lines++}如果行符合给定的模式,则增加变量lines

注意,所有这些常量3和4也可以放在-v之外,使其更通用:

awk -v patt="ERROR_FILE_NOT_FOUND" -v matches=3 -v lines_to_print=4 'lines==matches {print; appeared++} appeared==lines_to_print {lines=0;appeared=0} patt~$0 {lines++}' file

测试

$ awk -v patt="ERROR_FILE_NOT_FOUND" 'lines==3 {print; appeared++} appeared==4 {lines=0;appeared=0} patt~$0 {lines++}' file Extract line 1 Extract line 2 Extract line 3 Extract line 4 Extract line 5 Extract line 6 Extract line 7 Extract line 8 Extract line 9 Extract line 10 Extract line 11 Extract line 12

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐