Powershell,从文本文件中提取信息

时间:2011-06-14 07:03:10

标签: text powershell extract

我有两个脚本,我正在努力做到完美。我需要一位PowerShell专家来帮助我!

我有来自各种服务器的一系列日志文件(文本格式)和信息列。我有两个Powershell脚本(下面),它搜索和计算某些coulmns的详细信息并输出一个文本文件。

示例日志文件:

http://www.megaupload.com/?d=63XS8VKA

脚本#1(组合的RTP数据包丢失)

此脚本将查看日志文件中的“详细信息”列并计算所有“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数据包)

此脚本将查看日志文件中的“详细信息”列,并计算所有“已丢失的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

 . 

 .

 .

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:0)

您可以使用哈希表(关联数组,词典)累积与服务器名称关联的总和,而不是累积单个值(例如$ sum),然后将收集的数据从表中写出到文件中。

此链接中有一些哈希表用法示例:

Does powershell have associative arrays?