Анализ нескольких файлов .log для получения имени строки - PullRequest
0 голосов
/ 28 апреля 2020

File1.log:

Result for scripts as follows {"Script 1"=>{"expected"=>"Pass", "actual"=>"Pass", "result"=>true}, 
"Script 2"=>{"expected"=>"Fail", "actual"=>"Pass", "result"=>false}
-----
-----
-----
-----
Result for scripts as follows {"Script 3"=>{"expected"=>"Pass", "actual"=>"Pass", "result"=>true}, "Script 4"=>{"expected"=>"Fail", "actual"=>"Pass", "result"=>false}

File2.log:

Result for scripts as follows {"Script 1"=>{"expected"=>"Pass", "actual"=>"Pass", "result"=>true}, "Script 2"=>{"expected"=>"Pass", "actual"=>"Pass", "result"=>true}

Мне нужно будет проанализировать файлы .log, которые будут содержать несколько строк, и получить указанные выше строки один.

Единственное, что обычно используется для получения этого, - это первый текст: Result for scripts as follows.

Любые предложения по решению этой проблемы с использованием Ruby или любых команд powershell?

1 Ответ

0 голосов
/ 30 апреля 2020

Короче говоря, вам нужно построчно обходить каждый файл журнала, выполнять сопоставление с образцом и печатать результаты.

Приведенный ниже код должен решить вашу проблему

# my log files are in my current working directory

log_files = Dir["./*.log"]
false_matches = []
log_files.each do |x|
  puts "\n#{x}\n==========\n"
  f = File.open(x,"r")
  f.each_line do |line|
    false_matches.push(line.scan(/"Script \d*"=>{"expected"=>".{4}", "actual"=>".{4}", "result"=>false/))

  end
  puts "\n"
  f.close()
end

false_matches.each do |x| 
  unless x.length == 0
    puts x[0].scan(/Script \d*/)
  end
end

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