与下面的代码一样,处理脚本大约需要一个小时。我正在设法减少时间,因为这个脚本将安排每天运行。
我注意到,在创建新对象时,它会对每个标记使用相同的$_.Tag.Substring 1440次,并且有超过200个标记。
同时,使用度量对象3次通过相同的$_.Group进行处理以获得最小值、平均值和最大值。
我如何设置它们,使其不再重复这些相同的过程?
$data = Get-ChildItem $destinationPath\PPP_*.csv |
ForEach-Object { $_.FullName } |
Import-Csv -Header Tag, Value, Date, Time, Mode, Alarm
$data | ForEach-Object {
[pscustomobject]@{
"Column 1" = $_.Tag.Substring(8,2)
"Pump Unit" = $_.Tag.Substring(10,2)
"Column 3" = $_.Tag.Substring(12,2)
"Column 4" = $_.Tag.Substring(14,1)
"Value" = $_.Value
"Time" = $_.Time
}
} | Export-Csv -Path "$destinationPath\Summary.csv" -NoTypeInformation
$data | Group-Object Tag | ForEach-Object {
[pscustomobject]@{
"Column 1" = $_.Name.Substring(8,2)
"Pump Unit" = $_.Name.Substring(10,2)
"Column 3" = $_.Name.Substring(12,2)
"Column 4" = $_.Name.Substring(14,1)
"Minimum" = ($_.Group | Measure-Object -Property Value -Minimum).Minimum
"Average" = ($_.Group | Measure-Object -Property Value -Average).Average
"Maximum" = ($_.Group | Measure-Object -Property Value -Maximum).Maximum
}
} | Export-Csv -Path "$destinationPath\Statistics.csv" -NoTypeInformation发布于 2014-07-02 00:31:03
尝尝这个。我认为这需要PowerShell v3或更高版本才能使添加成员生成的属性“粘贴”到$data元素。
$data = $data | ForEach-Object {
Add-Member -InputObject $_ NoteProperty -Name "Column 1" -Value ($_.Tag.Substring(8,2))
Add-Member -InputObject $_ NoteProperty -Name "Pump Unit" -Value ($_.Tag.Substring(10,2))
Add-Member -InputObject $_ NoteProperty -Name "Column 3" -Value ($_.Tag.Substring(12,2))
Add-Member -InputObject $_ NoteProperty -Name "Column 4" -Value ($_.Tag.Substring(14,1))
$_
}
$data | ForEach-Object {
[pscustomobject]@{
"Column 1" = $_."Column 1"
"Pump Unit" = $_."Pump Unit"
"Column 3" = $_."Column 3"
"Column 4" = $_."Column 4"
"Value" = $_.Value
"Time" = $_.Time
}
} | Export-Csv -Path "$destinationPath\Summary.csv" -NoTypeInformation为了避免测量对象的重复,请更改为:
$data | Group-Object Tag | ForEach-Object {
$measInfo = $_.Group | Measure-Object -Property Value -Minimum -Maximum -Average
[pscustomobject]@{
"Column 1" = $_.Group[0]."Column 1"
"Pump Unit" = $_.Group[0]."Pump Unit"
"Column 3" = $_.Group[0]."Column 3"
"Column 4" = $_.Group[0]."Column 4"
"Minimum" = $measInfo.Minimum
"Average" = $measInfo.Average
"Maximum" = $measInfo.Maximum
}
} | Export-Csv -Path "$destinationPath\Statistics.csv" -NoTypeInformation发布于 2014-07-02 20:26:12
我从基思的代码中修改了一些,这样所有的东西都可以从一个ForEach-Object中处理
Get-ChildItem $destinationPath\PPP_*.csv |
ForEach-Object { $_.FullName } |
Import-Csv -Header Tag, Value, Date, Time, Mode, Alarm |
Group-Object -Property Tag |
ForEach-Object {
$tag = $_.Name
$column1 = $tag.Substring(8,2)
$pumpUnit = $tag.Substring(10,2)
$column3 = $tag.Substring(12,2)
$column4 = $tag.Substring(14,1)
$_.Group | ForEach-Object {
[pscustomobject]@{
"Column 1" = $column1
"Pump Unit" = $pumpUnit
"Column 3" = $column3
"Column 4" = $column4
"Value" = $_.Value
"Time" = $_.Time
}
} | Export-Csv -Path "$destinationPath\Summary.csv" -Append -NoTypeInformation
$measInfo = $_.Group | Measure-Object -Property Value -Minimum -Average -Maximum
[pscustomobject]@{
"Column 1" = $column1
"Pump Unit" = $pumpUnit
"Column 3" = $column3
"Column 4" = $column4
"Minimum" = $measInfo.Minimum
"Average" = $measInfo.Average
"Maximum" = $measInfo.Maximum
} | Export-Csv -Path "$destinationPath\Statistics.csv" -Append -NoTypeInformation
}https://stackoverflow.com/questions/24520980
复制相似问题