在这个线程中,我被帮助将文本文件行拆分为标记,计算某个标记的出现次数并将输出发送到呈现的表中。看起来像这样:
$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 返回
不允许使用空管道元素。
如果能朝正确的方向点头,将不胜感激。
数据文件看起来像这样,并且都用 .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:tempPowershell* -include *.alm -rec | gc | out-file C:tempPowershellTotal.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:tempPowershellSum.txt
不是最优雅的,因为我不得不混合批处理和电源外壳。但这就是我想出的,它奏效了。下一步是获取最后一行的第一个标记,并将其作为汇总文件的名称。最后让它每月运行一次,我很好。