我在一个目录中有数百个日志文件,我想要一种自动的方式浏览日志文件来计算每个命令的使用次数。
- 日志文件是文本文件
- 有 100 多个不同的命令
- 它们都以“命令:”开头,然后是命令的名称。
- 每个命令占一行
- 其他行应该忽略
所以我想知道是否有一个脚本或软件可以做到这一点,并按最常用的命令对结果进行排序,并显示每个命令的频率。 类似于统计数据。
(编辑:我使用的是 Win XP,安装此用途的程序没有任何问题)
答案1
和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 的部分是抑制运算符的输出,该-match
运算符会始终返回True
此处。我们不想按 分组,True bar
而只想按 分组bar
。
预计到达时间:根据您的输入的具体样子,您可能需要稍微调整一下。
允许空命令:
^Command: (\w*)
允许命令名称(和空命令)中出现任意非空格字符:
^Command: ([^ ]*)
答案2
什么操作系统?
这并不完全符合您的要求,但是......
grep -i -c Command *.log
将为您显示按文件细分的出现次数。然后您可以解析该输出以获取总数。将其转储到文本文件并将其拉入 Excel 或类似程序。不是很难,但不可否认也不是完全自动化的。我经常发现我花在寻找完全自动化解决方案上的时间比使用类似这样的解决方案的时间要多...您可以使用以下方法获取适用于 Windows 的 grep赛格威。