Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 分析数百个包含数字的.txt文件,然后查找总和_Powershell_Loops_Parsing - Fatal编程技术网

Powershell 分析数百个包含数字的.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

我有一个脚本,我在数千台服务器上运行,它从日志中编译关键字,并输出它们在文本文件中出现的次数。我使用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.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