Sort-Object not sorting as expected
我有一个非常大的csv(管道分隔),有四列(id、name、value、date(yyyy-mm-dd))。
我试图删除日期不等于最近日期的所有行。为此,我需要知道文件中最近的日期。
为了测试排序,我决定使用值列(int)。下面的脚本根本不对任何列上的文件排序,我看不出原因(尝试了将列强制转换为int或不强制转换为int)。
1 2 3 4 5 6 7 | Set-Location '<File_Path>' $file = 'file1.txt' Import-Csv $file -Delimiter '|' | Sort-Object @{e= {"Value" -as [int] }} -Descending | Select-Object -First 10 |
排序工作完成后,我可以选择第一个值并使用该值删除不匹配的行。下面是一个示例集:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | "ID"|"NAME"|"Value"|"Date" "ID000001"|"ID000001"|560000|2008-06-30 "ID000002"|"ID000002"|1490|2013-12-31 "ID000003"|"ID000003"|112038|2013-09-30 "ID000004"|"ID000004"|201103|2013-12-31 "ID000005"|"ID000005"|78205|2014-01-31 "ID000006"|"ID000006"|78205|2014-02-28 "ID000007"|"ID000007"|78205|2014-03-31 "ID000008"|"ID000008"|183979|2014-04-30 "ID000009"|"ID000009"|311380|2014-08-29 "ID000010"|"ID000010"|311380|2014-09-30 "ID000011"|"ID000011"|232693|2014-10-31 "ID000012"|"ID000012"|232693|2014-11-28 "ID000013"|"ID000013"|343243|2014-12-31 "ID000014"|"ID000014"|253822|2015-01-30 "ID000015"|"ID000015"|377489|2015-02-27 "ID000016"|"ID000016"|214111|2015-03-31 "ID000017"|"ID000017"|5690|2009-06-30 "ID000018"|"ID000018"|5690|2009-12-31 "ID000019"|"ID000019"|5690|2010-06-30 "ID000020"|"ID000020"|5000|2010-10-31 "ID000021"|"ID000021"|5000|2010-11-30 "ID000022"|"ID000022"|5000|2010-12-31 "ID000023"|"ID000023"|5000|2011-01-31 "ID000024"|"ID000024"|5000|2011-02-28 "ID000025"|"ID000025"|5000|2011-05-31 |
表达式
我相信你想要
1 |
相反
如果您使用的是PowerShell 2.0,那么
1 |
按日期对导入的csv进行分组,按名称(即日期)对组进行排序,然后选择并展开最后一个组:
1 2 3 4 | Import-Csv $file -Delimiter '|' | Group-Object Date | Sort-Object Name | Select-Object -Last 1 -Expand Group |
如果文件中的每个记录都有不同的日期,则可以跳过分组,只需按日期排序并选择最后一条记录:
1 2 3 | Import-Csv $file -Delimiter '|' | Sort-Object Date | Select-Object -Last 1 |
问题是排序对象中的e=in。我需要追加美元。列名称:
1 2 3 4 5 | Set-Location '<File_Path>' $file = 'file1.txt' Import-Csv $file -Delimiter '|' | Sort-Object @{e= { $_."Value" -as [int] }} -Descending | Select-Object -First 10 |