首页 > 解决方案 > 对 csv 文件进行排序并删除指定给列的旧行

问题描述

我在文件“script.csv”中有一个如下的csv

author,Revision,Path   
abc,9947,spc.sql  
xyz,9806,lmn.sql  
xyz,9810,lmn.sql  
xyz,9897,file.sql  
def,9811,test1.rdl  
def,9813,test1.rdl  

我正在尝试删除重复的行并且具有较旧的修订版。文件“script.csv”中的新输出应如下所示。

author,Revision,Path   
abc,9947,spc.sql  
xyz,9810,lmn.sql  
xyz,9897,file.sql  
def,9813,test1.rdl  

我尝试了下面的代码并击中了

$inputFile = 'D:\script.csv'
$inputCsv = Import-Csv $inputFile | Sort-Object * -Unique

标签: powershellcsv

解决方案


一种可能的解决方案是Sort-Object结合使用Group-Object

$csv = ConvertFrom-Csv "author,Revision,Path
abc,9947,spc.sql
xyz,9806,lmn.sql
xyz,9810,lmn.sql
xyz,9897,file.sql
def,9811,test1.rdl
def,9813,test1.rdl"

$csv | Sort-Object -Property author,Path,Revision -Descending | Group-Object author,Path | foreach {
    $_.Group[0]
}

输出:

author Revision Path     
------ -------- ----     
xyz    9810     lmn.sql  
xyz    9897     file.sql 
def    9813     test1.rdl
abc    9947     spc.sql 

推荐阅读