我有一个包含以下格式内容的日志文件:
[28/Feb/2017] 00007bd2 7d194700 - ERROR: ws_common:
[28/Feb/2017] 00007bd2 7d194700 - ERROR: ESI: getResponse: failed
[28/Feb/2017] 00007bd2 DOWN- [] ws_common:
我想找到并打印包含" DOWN"等关键字的行,以及消息在日志文件中显示的时间。
我在UNIX中这样做了:
SomeVariable =`cat $filename| grep "$DD/$MTH/$YR:$HR:$MINM" | grep DOWN | wc -l
但我似乎无法在Ruby中做到这一点。这将返回所有行以及行号:
File.foreach("#{filename}").with_index do |line, line_num|
if File.open("#{filename}") { |f| f.each.find { |line| line.include?("#
{DAY}/#{MTH}/#{YR}:#{HR}:#{MINM}" && "down") } }
puts "#{line_num}: #{line} "
end
end
以上面的文件为例,我想从中得到的输出是:
3 [28 / Feb / 2017] 00007bd2 DOWN- [] ws_common:
" 3"是第三行。
答案 0 :(得分:3)
我在UNIX中这样做了:
SomeVariable =`cat $filename| grep "$DD/$MTH/$YR:$HR:$MINM" | grep DOWN | wc -l
这里几乎是一样的。这将打印出DOWN
的所有行。
puts File.foreach(filename).grep(/DOWN/)
# >> [28/Feb/2017] 00007bd2 DOWN-
我不确定您是否希望 grep 获取时间戳,或者您只想知道DOWN事件的时间戳。如果是后者,你可以在这里(线条全部打印)。如果它是前者,那么实施起来应该不会太难,因为你已经掌握了这种新技术。