Powershell 分析数百个包含数字的.txt文件,然后查找总和
我有一个脚本,我在数千台服务器上运行,它从日志中编译关键字,并输出它们在文本文件中出现的次数。我使用xcopy将日志直接插入我的邮箱,并将它们全部放入同一个文件夹中。IE:C:\scripts\包含server1\u results.txt、server2\u results.txt等,每个服务器的输出如下所示:Powershell 分析数百个包含数字的.txt文件,然后查找总和,powershell,loops,parsing,Powershell,Loops,Parsing,我有一个脚本,我在数千台服务器上运行,它从日志中编译关键字,并输出它们在文本文件中出现的次数。我使用xcopy将日志直接插入我的邮箱,并将它们全部放入同一个文件夹中。IE:C:\scripts\包含server1\u results.txt、server2\u results.txt等,每个服务器的输出如下所示: ---------- C:\TEMP\TEXT.001: 0 ---------- C:\TEMP\TEXT.002: 0 ---------- C:\TEMP\TEXT.003: 2
---------- C:\TEMP\TEXT.001: 0
---------- C:\TEMP\TEXT.002: 0
---------- C:\TEMP\TEXT.003: 2
---------- C:\TEMP\TEXT.004: 0
---------- C:\TEMP\TEXT.005: 1
冒号后的数字是关键字在日志中出现的次数。然后,我使用一个批处理脚本解析出最终数字之前的所有内容,然后添加总数,然后将结果导出到一个新的文本文件中
我的方法工作得很好,但是,我有数百个日志,我的脚本只在一个日志上工作——一次一个
我一直在玩“获取内容”,但没有找到我想要的结果
因此,我需要一个脚本,它将循环和解析每个文件,并找到每个文件的总和server1将有自己的结果,server2将有自己的结果。如果脚本将文件名添加到结果中,也会很有帮助。我想要的结果是:
server1_results.txt : 22
这对我有用
$Files = (Get-ChildItem c:\scripts\*.txt).FullName
$count=0
foreach ($File in $Files)
{
$thisCount = Get-Content $File
$Count = $Count + $thisCount
}
"Total Count is: $Count"
我相信这将实现你想要的:
foreach ($file in (Get-ChildItem "C:\scripts\*_results.txt")) {
$Sum = 0
switch -regex -file $file
{
"[1-9]\d*$" {$sum += $matches[0] -as [int]}
}
"{0} : {1}" -f $file.name,$sum
}
您是否有任何性能目标?一个与我在中的批处理答案非常相似的powershell脚本 PS:只需更改*\u count.txt=>*\u results.txt即可 要获得一些统计数据:
> $HashTable.GetEnumerator()|Measure-Object Value -sum -ave -min -max
Count : 2
Average : 9
Sum : 18
Maximum : 15
Minimum : 3
Property : Value
您在获取内容方面遇到了什么问题?为什么不能在自己的脚本中添加循环?如果我没弄错的话,你只需要一个循环来读取你生成的所有文件?如果是,请尝试这样的操作:$OutPut=@Get childitem-path | foreach{$\u0.FileName+$Get Content-path$\u0.FullName}请先上传您拥有的内容,这样我们就可以看到它了。把它钉在头上!非常感谢。
> Q:\Test\2019\04\02\SO_55475471.ps1
Name Value
---- -----
server1_count 3
server2_count 15
> $HashTable.GetEnumerator()|Measure-Object Value -sum -ave -min -max
Count : 2
Average : 9
Sum : 18
Maximum : 15
Minimum : 3
Property : Value