如何从文本文件中提取信息?

| 我有来自不同服务器的一系列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是否具有关联数组?     

要回复问题请先登录注册