我有一个项目,我必须解析apache日志文件并将IP,URL和URL状态代码输出为散列,但是对于如何将元素放入哈希中感到困惑?
这是我当前使用正则表达式的代码,用于从日志文件的每一行中获取所需的信息:
line_array = File.readlines("access_log")
line_array.each { |line| }
#regexp
md = (/^([:\d\.]+) .*\[.*\].*\"[A-Z]+ *(.+) HTTP\S*\s(\d+)/).match(line)
ip = md[1]
url = md[2]
status = md[3]
我当前的代码在正确的位置上是否能够执行此操作?
感谢您的输入和帮助
假设您的md正确返回了您期望的字符串数组,然后尝试:
line_array = File.readlines("access_log")
line_array.each { |line| }
#regexp
md = (/^([:\d\.]+) .*\[.*\].*\"[A-Z]+ *(.+) HTTP\S*\s(\d+)/).match(line)
hash = Hash.new
hash[:ip] = md[1]
hash[:url] = md[2]
hash[:status] = md[3]
这将使用三个键创建一个哈希对象:
hash
=> { ip: 'whatever is in md[1]', url: 'whatever is in md[2]', status: 'whatever is in md[3]' }
也只是为了突出显示,通过访问md [1]您正在访问数组的第二个元素,如果要第一个元素,则需要md [0]