去年我和powershell做了一些基本工作,但由于某些原因,这让我感到厌烦。任何帮助将不胜感激。
我有一个csv文件,它有几百个条目:
Path,Data,Files
\\someserver\somepath1,100,1
\\someserver\somepath2,150,4
\\someserver\somepath1,200,5
\\someserver\somepath3,450,8
\\someserver\somepath4,200,23
\\someserver\somepath1,350,2
\\someserver\somepath2,800,9
我想让powershell脚本解析整个文件并生成一个新的csv,其结果显示唯一路径和总和数据和文件值。因此,从上面我的预期结果将是(最好按最大数据值排序):
Path,Data,Files
\\someserver\somepath2,950,9
\\someserver\somepath1,650,8
\\someserver\somepath3,450,8
\\someserver\somepath4,200,23
我已经找到了几个答案,指的是总结一个列,但我还没有弄清楚两列。对代码和/或技术的任何建议都将非常感激。谢谢!
答案 0 :(得分:0)
$csv=Import-Csv c:\temp\test.csv
$csv | select -Unique -expand path|%{
$path=$_
$sdata=($csv | ?{$_.path -eq $path} | measure-object data -sum).sum
$files=($csv | ?{$_.path -eq $path} | Measure-Object files -sum).sum
"$path,$sdata,$files" |out-file c:\temp\new.csv -append
}
答案 1 :(得分:0)
然后Kayasax的解决方案远没那么优雅,但仍然具有功能性。这将循环通过每个入口建筑物和阵列。当它找到数组中已存在的路径时,它会添加数据和文件的值。此外,这将输出一个对象,您可以使用powershell命令!
$collection = @()
Import-Csv E:\temp\stack.csv | ForEach-Object{
If ($collection.Count -gt 0) {
If ($collection.path.IndexOf($_.Path) -ne -1){
# We already know about this path. Add Values
$index = $collection.path.IndexOf($_.Path)
$collection[$index].Data = [int]$collection[$index].Data + [int]$_.Data
$collection[$index].Files = [int]$collection[$index].Files + [int]$_.Files
} Else {
# Add this objec to the collection
$properties = @{'Path'=$_.Path;
'Data'=$_.Data;
'Files'=$_.Files}
$object = New-Object –TypeName PSObject –Prop $properties
$collection += $object
}
} Else {
# Collection is empty. Add the first one.
$properties = @{'Path'=$_.Path;
'Data'=$_.Data;
'Files'=$_.Files}
$object = New-Object –TypeName PSObject –Prop $properties
$collection += $object
}
}
$collection | Sort-Object data -Descending
<强>输出强>
Path Data Files
---- ---- -----
\\someserver\somepath2 950 13
\\someserver\somepath1 650 8
\\someserver\somepath3 450 8
\\someserver\somepath4 200 23