如何解决如何从文本文件中提取信息?
| 我有来自不同服务器的一系列Log文件(文本格式),其中包含信息列。我有两个PowerShell脚本(如下),它们从某些列中查找并计算详细信息,并输出一个文本文件。 脚本1(合并的RTP数据包丢失) 该脚本将查看日志文件中的“ Details”列,并计算所有“ XX个RTP数据包已丢失”(例如57个RTP数据包已丢失) 该脚本可以在包含(* .log)文件的任何目录或文件夹中执行,并且将为您提供丢失的RTP数据包总数。 $sum = 0
foreach ($i in dir -filter *.log -Rec)
{
$sum += (gc $i.fullname | select -Skip 5 | ConvertFrom-Csv -Delimiter \"`t\" | ? {$_.Details - match \"^(\\d+)\"} |% {$matches[1]} | Measure-Object -Sum).Sum
}
$sum | Tee-Object -FilePath .\\CombinedResults.txt
[Console]::Write(\"Press any key to continue . . . \")
[Console]::ReadKey()
脚本2(实体丢失的总RTP数据包)
该脚本将查看日志文件中的“ Details”列,并计算所有的“ XX个RTP数据包已丢失”(例如,57个RTP数据包已丢失)。您可以在\“实体\”列中找到每个实体(相机)的实体名称丢失的总数据包。
该脚本可以在包含(* .log)文件的任何目录或文件夹中执行,并且将为您提供每个实体丢失的RTP数据包总数。
$out=foreach ($i in dir -filter *.log -Rec)
{
$cameras = gc $i.fullname | select -Skip 5 | ConvertFrom-Csv -Delimiter \"`t\" | group \"Entity \"
$cameras | select Name,@{n=\"Total\";e={ ($_.group | ? {$_.Details -match \"^(\\d+)\"} |% {$matches [1]} | Measure-Object -Sum).Sum}} | ? {$_.Total -gt 0}
}
$out | Tee-Object -FIlePath .\\ByEntityResults.txt
[Console]::Write(\"Press any key to continue . . . \")
[Console]::ReadKey()
这是我要实现的目标:
这些日志文件来自各种服务器,我希望结果可以由服务器过滤。在左上角的日志文件中,它指出\“计算机名称:\”
对于这两个脚本,我希望按“计算机名称”过滤结果。
最终结果示例:
Script # 1
Computer Name: T3-Archiver22
Total RTP Packet(s) lost = 43243
Computer Name: T3-Archiver24
Total RTP Packet(s) lost = 8837
Script # 2
Computer Name: T3-Archiver22
Entity Name: Total RTP Packet(s) lost
(7233)C2-GF-127 - 10.20.13.69(P) 54
.
.
.
Computer Name: T3-Archiver24
Entity Name: Total RTP Packet(s) lost
(6547)U2 Z-C14 27
.
.
.
解决方法
您可以使用哈希表(关联数组,字典)累积与服务器名称关联的总和,而不必累积单个值(例如$ sum),然后将收集的数据从表中写出到文件中。
此链接中有一些哈希表用法的示例:
powershell是否具有关联数组?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。