Powershell 将数字添加到2个总数中,并将其放入各自的变量中
希望你能帮我解决这个小难题 我有一个txt文件,如下所示: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=$_;}
# 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
。您可以手动执行此操作,也可以相应地更新脚本。看看我的编辑。很棒的东西。它也可以工作,并且您可以使用一些字符串来获得乐趣:-)