运行 一个脚本,用于计算文件夹中所有/某些文件中令牌的出现次数并添加结果
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。但这是我想出的,而且奏效了。下一步是获取最后一行的第一个标记,并将其作为汇总文件的名称。最后每月 运行 一次,我很好。
在
$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。但这是我想出的,而且奏效了。下一步是获取最后一行的第一个标记,并将其作为汇总文件的名称。最后每月 运行 一次,我很好。