【问题标题】:Using PowerShell to count unique error messages in a log file使用 PowerShell 计算日志文件中的唯一错误消息
【发布时间】:2018-08-02 17:48:15
【问题描述】:

我有几个包含数百行的日志文件,格式如下:

{"time": 0800, "service":"A service", "id": 5, "error":"bad"}  
{"time": 0900, "service":"B service", "id": 6, "error":"good"}  

我希望能够遍历每个文件并输出一个表格,其中包含每个唯一错误消息的计数......像这样:

错误“坏”出现了 5 次

错误“好”出现了 3 次

我不确定在这种情况下将内容转换为 JSON 是否有意义,但到目前为止我已经完成了以下操作以至少识别唯一字符串:

Get-Childitem -path "\path" | Select-string -Pattern "good"

这给了我所有“好”的信息。

在我看来,可以使用带有计数器的循环来捕获唯一事件。使用 PowerShell 实现这一切的最佳方式是什么?

【问题讨论】:

  • 只是提醒一下,您可以通过管道将您的命令传递给Measure-Object,它会返回您的行数。

标签: powershell


【解决方案1】:

使用ConvertFrom-Json将文件中的json字符串转换为对象,然后使用Group-Object将它们按error属性分组:

Get-Childitem -path "\path" |ConvertFrom-Json |Group-Object error -NoElement

【讨论】:

  • @Avshalom Argh,对不起老兄,我的人生故事:-P
  • 太棒了,效果很好。其中一个文件的格式是 convertfrom-json cmdlet 不喜欢的。只有一行,就像这样,{“error”:“bad”},但它分散在 3 行。抛出的错误是“传入':'或'}的无效对象”。如何跳过无法识别 json 的文件。或者如何更改它以使其被识别?第二个跟进问题。如何访问对象的属性?例如,我想显示“服务”和“时间”属性。我只得到计数、组和名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 2020-04-08
  • 1970-01-01
相关资源
最近更新 更多