반응형
PowerShell에서 객체의 여러 항목을 합산하는 방법?
내가 가지고 있습니다.
$report.gettype().name
Object[]
echo $report
Item Average
-- -------
orange 0.294117647058824
orange -0.901960784313726
orange -0.901960784313726
grape 9.91335740072202
grape 0
pear 3.48736462093863
pear -0.0324909747292419
pear -0.0324909747292419
apple 12.1261261261261
apple -0.0045045045045045
예를 들어 각 항목에 대한 '평균' 열의 합을 포함하는 변수 $total(해시 테이블 등)을 생성하려고 합니다.
echo $total
orange -1.5097
grape 9.913
pear 3.423
apple 12.116
지금 당장은 $보고서를 검토해 보려고 하는데, 정말 보기 흉하고, 다음의 시작점(불완전)보다 더 우아한 것을 찾고 있습니다.
$tmpPrev = ""
foreach($r in $report){
$tmp = $r.item
$subtotal = 0
if($tmp <> $tmpPrev){
$subtotal += $r.average
}
이거 어떻게 해요?
Cmdlets Group-Object 및 Measure-Object는 PowerShell 방식으로 작업을 해결하는 데 도움이 됩니다.
코드:
# Demo input
$report = @(
New-Object psobject -Property @{ Item = 'orange'; Average = 1 }
New-Object psobject -Property @{ Item = 'orange'; Average = 2 }
New-Object psobject -Property @{ Item = 'grape'; Average = 3 }
New-Object psobject -Property @{ Item = 'grape'; Average = 4 }
)
# Process: group by 'Item' then sum 'Average' for each group
# and create output objects on the fly
$report | Group-Object Item | %{
New-Object psobject -Property @{
Item = $_.Name
Sum = ($_.Group | Measure-Object Average -Sum).Sum
}
}
출력:
Sum Item
--- ----
3 orange
7 grape
더 많은 명령줄 솔루션이 있습니다.
기본 $보고
$groupreport = $report | Group-Object -Property item -AsHashTable
가
Name Value
---- -----
grape {@{Item=grape; Average=9.91335740072202}, @{Item=grape; Average=0}}
orange {@{Item=orange; Average=0.294117647058824}, @{Item=orange; Average=-0.901960784313726...
apple {@{Item=apple; Average=12.1261261261261}, @{Item=apple; Average=-0.0045045045045045}}
pear {@{Item=pear; Average=3.48736462093863}, @{Item=pear; Average=-0.0324909747292419}, @...
그리고나서
$tab=@{}
$groupreport.keys | % {$tab += @{$_ = ($groupreport[$_] | measure-object -Property average -sum)}}
주는
PS> $tab["grape"]
Count : 2
Average :
Sum : 9,91335740072202
Maximum :
Minimum :
Property : Average
PS> $tab["grape"].sum
9,91335740072202
그것은 짧고 사용할 수 있을 것 같습니다.
요약
$groupreport = $report | Group-Object -Property item -AsHashTable
$tab = @{}
$groupreport.keys | % {$tab += @{$_ = ($groupreport[$_] | measure-object -Property average -sum)}}
$tab.keys | % {write-host $_ `t $tab[$_].sum}
당신이 루프를 없앨 수 있을지 모르겠습니다.다음은?
$report | % {$averages = @{}} {
if ($averages[$_.item]) {
$averages[$_.item] += $_.average
}
else {
$averages[$_.item] = $_.average
}
} {$averages}
언급URL : https://stackoverflow.com/questions/5999930/how-to-sum-multiple-items-in-an-object-in-powershell
반응형
'sourcecode' 카테고리의 다른 글
jsch를 통해 실행하면 자바 프로그램과 mariadb 연결이 되지 않습니다. (0) | 2023.10.20 |
---|---|
SQL에서 출력을 정수로 선택/캐스팅 (0) | 2023.10.20 |
PowerShell에서 점(.)과 앰퍼샌드(&)의 차이점은 무엇입니까? (0) | 2023.10.15 |
아웃라인과 경계 CSS 속성의 차이점은 무엇입니까? (0) | 2023.10.15 |
D3 힘 레이아웃 그래프를 확대하는 방법이 있습니까? (0) | 2023.10.15 |