Как поместить информацию о регулярном выражении в хеш - PullRequest
0 голосов
/ 24 октября 2019

Мне нужно проанализировать файл журнала 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]

Мой текущий код находится даже на правильном пути, чтобы можно было это сделать?

Мне нужны хэши для отображенияпункт, а затем частота указанного пункта. Таким образом, если у нас есть хэш для IP-адресов, он будет отображать IP-адреса в файле журнала, следуя частоте этого конкретного IP-адреса.

1 Ответ

1 голос
/ 24 октября 2019

Если ваш 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]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...