【问题标题】:How to get a sum of counted objects using PowerShell如何使用 PowerShell 获取计数对象的总和
【发布时间】:2021-01-28 22:22:06
【问题描述】:

我正在尝试获取文本文件中计数的对象的总和。例如,这就是我的文件的样子:

服务器总数:3 数据库总数:10 总表空间:30

服务器总数:5 数据库总数:50 总表空间:500

服务器总数:3 数据库总数:30 总表空间:100

我需要获取数据库的总和,所以总共应该是 90。

【问题讨论】:

标签: powershell


【解决方案1】:

这是一种方法(假设您的数据位于名为 list.txt 的文件中):

$dbCount = 0
Get-Content "list.txt" | ForEach-Object {
  $matches = [Regex]::Matches($_,'Total databases: (\d+)',"IgnoreCase")
  if ( $null -ne $matches.Groups ) {
    $dbCount += $matches.Groups[1].Value -as [Int]
  }
}

使用list.txt 中的样本数据,$dbCount 将等于90

【讨论】:

    【解决方案2】:

    给定文本文件内容为$inputString

    $array = $inputString.Split([Environment]::NewLine)
    $regex = 'Total databases: (?<dbCount>)[0-9]+'
    $sum = 0
    
    ForEach $string in $array {
        $string -match $regex
    
        $sum = $sum + [int]$Matches.dbCount
    }
    

    参考资料:

    $sum 包含您要搜索的值。

    【讨论】:

    • 感谢您的代码,但是,我在解析“Total databases: (?)[0-9]+)”时遇到此错误 - Too many )'s
    • 去掉最后一个")"
    • 我删除了 ')' 但结果我得到了“False”作为输出。
    【解决方案3】:

    您可以执行以下操作:

    ((Get-Content file.txt) -replace '^.*databases: (\d+).*$','$1' | Measure-Object -Sum).Sum
    

    【讨论】:

      猜你喜欢
      • 2020-12-29
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      • 2019-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多