gpt4 book ai didi

windows - Powershell 排序和过滤

转载 作者:可可西里 更新时间:2023-11-01 11:34:34 25 4
gpt4 key购买 nike

我有一个包含详细数据的 csv 文件,比如列 A、B、C、D 等。列 A 和 B 是类别,C 是时间戳。

我正在尝试创建一个摘要文件,为 A 和 B 的每个组合显示一行。它应该从原始数据中选择 C ​​是最近日期的行。

下面是我尝试解决这个问题。

Import-CSV InputData.csv |  `
Sort-Object -property @{Expression="ColumnA";Descending=$false}, `
@{Expression="ColumnB";Descending=$false}, `
@{Expression={[DateTime]::ParseExact($_.ColumnC,"dd-MM-yyyy HH:mm:ss",$null)};Descending=$true} | `
Sort-Object ColumnA, ColumnB -unique `
| Export-CSV OutputData.csv -NoTypeInformation

首先读取文件,然后按所有 3 列对所有内容进行排序,然后第二次 Sort-Object 调用应该取每一行的第一行。但是,带有 -unique 开关的 Sort-Object 似乎会选择随机行,而不是第一行。因此,这确实为每个 AB 组合得到一行,但不是与最近的 C 对应的那一行。

有什么改进建议吗?数据集非常大,所以逐行查看文件很尴尬,所以更喜欢 powershell 解决方案。

最佳答案

您应该查看Group-By。我没有创建示例 CSV(您应该提供它:-))所以我还没有对此进行测试,但我认为它应该可以工作:

Import-CSV InputData.csv |  `
Select-Object -Property *, @{Label="DateTime";Expression={[DateTime]::ParseExact($_.ColumnC,"dd-MM-yyyy HH:mm:ss",$null)}} | `
Group-Object ColumnA, ColumnB | `
% {
$sum = ($_.Group | Measure-Object -Property ColumnD -Sum).Sum
$_.Group | Sort-Object -Property "DateTime" -Descending | Select-Object -First 1 -Property *, @{name="SumD";e={ $sum } } -ExcludeProperty DateTime
} | Export-CSV OutputData.csv -NoTypeInformation

这将返回与输入相同的列(日期时间从输出中排除)。

关于windows - Powershell 排序和过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14565412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com