Powershell 将数字添加到2个总数中,并将其放入各自的变量中

Powershell 将数字添加到2个总数中,并将其放入各自的变量中,powershell,powershell-3.0,Powershell,Powershell 3.0,希望你能帮我解决这个小难题 我有一个txt文件,如下所示: # C:\Temp> get-content .\numbers.txt | foreach{ $val=0; if([Decimal]::TryParse($_,[ref]$val)){ $sums[$key]+=$val }else{ $sums += @{"$_"=0}; #add new entry to hashtable $key=$_;}

希望你能帮我解决这个小难题

我有一个txt文件,如下所示:

# C:\Temp> get-content .\numbers.txt | foreach{
    $val=0;
    if([Decimal]::TryParse($_,[ref]$val)){
        $sums[$key]+=$val
    }else{
        $sums += @{"$_"=0}; #add new entry to hashtable
        $key=$_;}
    } -end {$sums; remove-variable sums;}
头号

348.92

237

230

329.31

第二号码

18.21

48.92

37

三十

29.31

所以一个txt文件有一列,每行有两个字符串和一些数字

我想得到每列的总数,并将其放入每个变量中,比如$a和$b 是的,这是一列,只是为了确保没有误解

如果我使用2个文件,每列数字都没有标题(字符串),那么这很简单

但是将它们放在一个txt文件中会更酷一些,就像前面提到的每行数字上都有一个标题

我尝试过删除标题,例如,
$a.Replace(“first”,$null)。Replace(“sec”,$null),然后执行$b.Split(“”[1,2,3,4,5])
|measure-sum
结尾 这给了我正确的firstnumbers数——但如果我每次都不保留特定的一组数字,这就行不通了。他们会改变,会有更多或更少的人

我猜这应该很容易。我现在似乎无法控制自己的情绪

任何建议都太棒了


干杯

像这样的事情应该行得通:

$file = "C:\path\to\your.txt"

[IO.File]::ReadAllText($file) | % {
  $_ -replace "`n+([0-9])", ' $1' -split "`n"
} | ? { $_ -ne "" } | % {
  $a = $_ -split " ", 2
  $v = $a[1] -split " " | Measure-Object -Sum
  "{0}`t{1}" -f ($a[0], $v.Sum)
}
输出:

firstnumbers    1145,23
secondnumbers   163,44

这里有另一种方法,而不是将文本解析为一个大blob,您可以测试每一行,看看它是否包含#或文本,如果它是文本,那么它会触发在存储和的哈希表中创建一个新条目:

# C:\Temp> get-content .\numbers.txt | foreach{
    $val=0;
    if([Decimal]::TryParse($_,[ref]$val)){
        $sums[$key]+=$val
    }else{
        $sums += @{"$_"=0}; #add new entry to hashtable
        $key=$_;}
    } -end {$sums}

Name                           Value                                                                                                                       
----                           -----                                                                                                                       
secondnumbers                  163.44                                                                                                                      
firstnumbers                   1145.23   
编辑:如注释中所述,$SUMMS变量在每次运行时都会持续存在,如果您运行此命令两次,则会导致问题。您可以在每次运行后调用
Remove variable sums
,或将其添加到
end
处理块,如下所示:

# C:\Temp> get-content .\numbers.txt | foreach{
    $val=0;
    if([Decimal]::TryParse($_,[ref]$val)){
        $sums[$key]+=$val
    }else{
        $sums += @{"$_"=0}; #add new entry to hashtable
        $key=$_;}
    } -end {$sums; remove-variable sums;}

很酷的方法,也有效!(尽管要注意,每次运行时值都会增加,因此只能运行一次)@Pieinacup此脚本在运行之前不会重置
$sums
。您可以手动执行此操作,也可以相应地更新脚本。看看我的编辑。很棒的东西。它也可以工作,并且您可以使用一些字符串来获得乐趣:-)