我正在尝试使用 awk 过滤日志文件。现在过滤基于时间,超出时间范围的日志文件条目将被删除,而范围内的条目将被保留。现在,一旦我遇到一个在时间范围内的条目,我就知道所有以下条目也将在时间范围内。
因此,无需再进行任何检查,那么 awk 中有没有办法干净利落地做到这一点?我的意思是我可以使用一个标志变量来表示不再需要检查并打印每一行。但是有没有办法说“只处理所有剩余的行”?
awk 'flag == 0 || some_test { flag = 1 } flag == 1 { processing }'
Run Code Online (Sandbox Code Playgroud)
这将使用布尔/二进制“标志”来跟踪处理何时可以进行到文件末尾。
第一个块测试数据中可以开始处理的点。的some_test事情应该是你现有的测试。只要flag == 0. 一旦您的测试为真,该标志就会切换为1,这将禁用您的测试并启用该processing块。
最后一个块将运行从触发您的第一行some_test到文件末尾的所有行。