日志文件是
Oct 01 [time] a
Oct 02 [time] b
Oct 03 [time] c
.
.
.
Oct 04 [time] d
Oct 05 [time] e
Oct 06 [time] f
.
.
.
Oct 28 [time] g
Oct 29 [time] h
Oct 30 [time] i
而且它真的大(数百万行)
我想要Oct 01
到Oct 30
之间的日志
我可以呆呆地做这件事
gawk 'some conditions' filter.log
而且它工作正常。
并返回数百万个不好的日志行
因为我想一部一部地
像这样的事情
gawk 'some conditions' -limit 100 -offset 200 filter.log
每次我更改limit
和offset
时
我可以拿到另一部分。
我怎么能做到这一点?
2条答案
按热度按时间yhxst69z1#
AWK解决方案我将利用GNU AWK完成以下任务,让
file.txt
内容假设我想打印这样的行,第一个字段是奇数,从第3行开始,在第7行(含)结束,然后我可以使用GNU
AWK
,如下所示这将给你带来
解释:
NR
是内置变量,它保存n个数row,当处理3
之前的行只去next
行而不做任何事情时,当余数从除以2是非零时做print
行,当处理第7行或更多行时只做exit
。如果您正在处理相对较小的文件部分,则使用exit
可能会显著提高性能。观察上面代码中3个模式-动作对的顺序:next
是第一个,然后是您想要做的任何事情,exit
是最后一个。如果您想了解更多关于NR
的信息,请阅读8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNRLinux解决方案如果您更喜欢使用偏移量限制,那么您可以利用尾部组合,例如,对于
file.txt
以上给出输出
注意到偏移量首先使用
+
之前的值,然后使用-
之前的值进行限制。vdgimpew2#
使用OP的伪代码和一些实际的
awk
代码: