【问题标题】:Powershell : get values ​over 30 rolling daysPowershell:获取超过 30 个滚动天的值
【发布时间】:2020-09-28 21:52:53
【问题描述】:

在一个文件中,我想做一个循环来为每一行获取该行之前的行的29个值的累加值+当前行的值但是我转圈和我没有得到预期的结果。你能帮帮我吗?

$DesktopPath = [Environment]::GetFolderPath("Desktop")
$BLFiles="$DesktopPath\BL.csv" $BL= Import-csv $BLFiles -delimiter ";" -encoding UTF8 | select-object -Last 60
 
$BL30J=0 $day=0
 
foreach ($value in $BL) {
    $day+=1
    if ($day -le 30) {
        $BL30J+=$value."Total" 
        write-host "Day $day : $BL30J" 
    }
}

BL.csv 的内容:

"line";"Total"
"01";"01"
"02";"01"
[...]
"60";"01"

【问题讨论】:

  • 我认为您正在寻找类似For($i=0;$i -lt 30;$i++){$Last30=$BL[$i..($i+29)] | Measure-Object Total -Sum | % Sum; Write-Host "Day $($i+1) : $Last30"}
  • 你为什么要抢最后 60 个?
  • 因为“第 30 天”= 第 30 天到第 59 天值之和的值......“第 1 天”= 第 01 天到第 29 天之和的值

标签: powershell foreach


【解决方案1】:

假设“这一行”是最近的,加上之前的 29 行,你可以简单地这样做来得到总数。

Import-Csv $tempfile -Delimiter ';' -Encoding utf8 |
    Select-Object -last 30 -ExpandProperty total |
        Measure-Object -Sum | Select-Object -ExpandProperty sum

或者如果你喜欢速记

((Import-Csv $tempfile -Delimiter ';' -Encoding utf8 | Select -last 30).total | Measure -Sum).sum

【讨论】:

  • 感谢您的帮助。 @TheMadTechnician 提出的解决方案给了我预期的结果。我将能够继续。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2013-08-02
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
相关资源
最近更新 更多