运行 一个脚本,用于计算文件夹中所有/某些文件中令牌的出现次数并添加结果

Run a script that counts occurences of token in all / certain files in a folder and adds the results

中,有人帮助我编写了一个脚本,该脚本将文本文件行拆分为标记,计算某个标记的出现次数并将输出发送到呈现的 table。看起来像这样:

$alarmList = @(Get-Content -Path '.\A.ALM') | foreach { 
$token = $_ -split ' +'
[PSCustomObject]@{
     date = $token[0]
     time = $token[1]
     H2   = $token[2]
     H3   = $token[3]
     H4   = $token[4]
     H5   = $token[5]
     H6   = $token[6]
     H7   = $token[7]
     H8   = $token[8]
}
}
$alarmList | Group H4 -NoElement | Select Name,Count | Out-Gridview

接下来我想实现一个脚本-运行覆盖文件夹中的文件。然后把计数放在一起,用同样的方法呈现。基本上就是一个报警统计的脚本。

我卡在了运行为多个文件设置脚本的部分。这似乎工作正常:

foreach ($i in Get-ChildItem .\) {$alarmList = @(Get-Content -Path $i)}

当我尝试绑定更多函数时,它不起作用。

foreach ($i in Get-ChildItem .\) {$alarmList = @(Get-Content -Path $i)} |  
foreach { 
    $token = $_ -split ' +'
    [PSCustomObject]@{
         date = $token[0]
         time = $token[1]
         H2   = $token[2]
         H3   = $token[3]
         H4   = $token[4]
         H5   = $token[5]
         H6   = $token[6]
         H7   = $token[7]
         H8   = $token[8]
    }
}
$alarmList | Group H4 -NoElement | Select Name,Count | Out-File $.txt

我怀疑第二个 for 循环的语法不正确,因为 powershell returns

An empty pipe element is not allowed.

我们将不胜感激。

数据文件看起来像这样,并且都用 .alm 命名:

2018-05-19  00:26:00,551 [LUNSC1  ] D_TA204_GT1_DV_AL             CFN              LARM      D_TA204_GT1_Reglerfel                  
2018-05-19  00:28:01,049 [LUNSC1  ] D_TA204_GT41_DV_AL            CFN              LARM      D_TA204_GT41_Reglerfel                 
2018-05-19  00:28:01,049 [LUNSC1  ] D_TA204_GT31_DV_AL            CFN              LARM      D_TA204_GT31_Reglerfel                 
2018-05-19  00:28:01,049 [LUNSC1  ] D_TA204_GT21_DV_AL            CFN              LARM      D_TA204_GT21_Reglerfel                 
2018-05-19  00:35:19,627 [LUNSC1  ] U_TA364_GT11_LARM             CFN              LARM      U_TA364_GT11_LARM                      
2018-05-19  00:39:56,135 [LUNSC1  ] U_TA364_GT11_LARM             CFN              LARM      U_TA364_GT11_LARM 

例如,我有 5 个文件都包含上述数据。

这是最后的剪辑,

Set-Location (Split-Path -parent $MyInvocation.MyCommand.Definition)

$alarmList = New-Object System.Collections.ArrayList

foreach ($i in Get-ChildItem ".\*.ALM") {
Get-Content -Path $i | 
    foreach { 
    $token = $_ -split '+'
    $alarmList.Add([PSCustomObject]@{
             date = $token[0]
             time = $token[1]
             H2   = $token[2]
             H3   = $token[3]
             H4   = $token[4]
             H5   = $token[5]
             H6   = $token[6]
             H7   = $token[7]
             H8   = $token[8]
        })
    }
}

$alarmList |  Group H4 -NoElement | select name, count

我首先实现了一个合并文本文件的脚本 运行,然后附加了工作脚本来计算单个文件的标记数。看起来像这样:

dir C:\temp\Powershell\* -include *.alm -rec | gc | out-file C:\temp\Powershell\Total.txt 
$alarmList = @(Get-Content -Path '.\Total.txt') | foreach { 
        $token = $_ -split ' +'
        [PSCustomObject]@{
             date = $token[0]
             time = $token[1]
             H2   = $token[2]
             H3   = $token[3]
             H4   = $token[4]
             H5   = $token[5]
             H6   = $token[6]
             H7   = $token[7]
             H8   = $token[8]
        }
        }
$alarmList | Group H4 -NoElement | Select Name,Count | Out-File c:\temp\Powershell\Sum.txt

不是最优雅的,因为我不得不混合批处理和 powershell。但这是我想出的,而且奏效了。下一步是获取最后一行的第一个标记,并将其作为汇总文件的名称。最后每月 运行 一次,我很好。