С 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 =
Часть для матча, чтобы подавить вывод -match
оператора, который будет возвращать всегда True
здесь. Мы не хотим группировать, True bar
но только по bar
.
ETA: В зависимости от того, как точно выглядит ваш ввод, вы можете немного подправить настройки.
Разрешить пустые команды:
^Command: (\w*)
Разрешить произвольные непробельные символы в именах команд (и пустые команды):
^Command: ([^ ]*)