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

  • Файлы журнала являются текстовыми файлами
  • Есть более 100 разных команд
  • все они начинаются с «Command:», а затем с названия команды.
  • Это одна строка на команду
  • другие строки должны игнорироваться

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

(редактировать: я нахожусь на Win XP и у меня нет проблем с установкой программ для этой цели)

2 ответа2

2

С Windows PowerShell вы можете сделать что-то вроде:

Get-Content *.log |
    Where-Object { $_.StartsWith('Command:') } |
    Group-Object {
        $null = $_ -match '^Command: (\w+)';
        $Matches[1]
    } |
    Select-Object Name,Count

Для моего тестового файла это дает вывод как

Name Count
---- -----
foo      2
bar      2
baz      1

Приведенный выше код просто считывает файлы журнала построчно, проталкивая каждую строку по конвейеру, затем фильтрует строки, чтобы использовать только те из них, которые начинаются с «Command:», указывая на команду, которой необходимо следовать. Затем эти строки сгруппированы в отдельные команды. Это делается с помощью регулярного выражения

 ^Command: (\w+)

которая соответствует строке «Command:» в начале строки, за которой следуют один или несколько символов слова. Это предполагает, что имя команды следует сразу за двоеточием и пробелом; скорректируйте регулярное выражение соответственно, если это не так. Имя команды записывается в группу захвата, которая используется для группировки. После этого выбираются только название и частота команд.

$null = part для совпадения должна подавить вывод оператора -match который всегда будет возвращать True здесь. Мы не хотим группировать по True bar а только по bar .

ETA: В зависимости от того, как точно выглядит ваш ввод, вы можете немного подправить настройки.

  • Разрешить пустые команды:

     ^Command: (\w*)
    
  • Разрешить произвольные непробельные символы в именах команд (и пустые команды):

     ^Command: ([^ ]*)
    
0

Какая ОС?

Это не идеально соответствует вашим требованиям, но ...

grep -i -c Command *.log

даст вам количество вхождений с разбивкой по файлам. Затем вы можете проанализировать этот вывод, чтобы получить ваши итоги. Скопируйте его в текстовый файл и перетащите в Excel или еще что-нибудь. Не очень сложно, но, по общему признанию, не полностью автоматизировано. Я часто нахожу, что трачу больше времени на поиск полностью автоматизированного решения, чем на что-то подобное ... Вы можете получить grep для Windows, используя cygwin.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .