2017-02-23 84 views
1

我有一個工作PowerShell腳本,刪除CSV文件中的重複,但它排序的數據,我不想要的列標題,並不能找出一種方法來保持列標題。從CSV中刪除重複但仍然保留列標題

Get-Content C:\testdata.csv | ConvertFrom-Csv -Header "Column1", "Column2", "Column3", "Column4" | sort -Unique -Property Column1 | % {"{0},{1},{2},{3}" -f $_.Column1, $_.Column2, $_.Column3, $_.Column4} | set-content c:\output.csv 

測試數據CSV如下:

 
Name,IDNumber,OtherNumber,UniqueCode 
Tom,10,133,abcd 
Tom,10,133,abcd 
Bill,4,132,efgh 
Bill,4,132,efgh 
Bill,4,132,efgh 
Lefty,3,122,ijkl 
Lefty,3,122,ijkl 
Lefty,3,122,ijkl 
Lefty,3,122,ijkl 

有沒有辦法用PowerShell來做到這一點?

回答

3

使用Import-CsvExport-Csv使得這個過程更容易,因爲它們是爲了處理csv文件和頭文件而構建的。

Import-Csv "C:\testdata.csv" | Sort-Object * -Unique | Export-Csv "c:\output.csv" -NoTypeInformation 
+0

跟我打賭它由秒, @詹姆斯C! ;) – TechSpud

+0

詹姆斯C非常感謝你,太棒了!我今天剛學到東西,那個解決方案是完美的。 –

+0

你應該接受這個答案。 –

0

未經檢驗的,但試試這個...

Import-Csv -Path 'C:\path\to\File.csv' | 
    Select * -Unique | 
    Export-Csv 'C:\path\to\NewFile.csv' -NoTypeInformation 
0

你可以使用選擇-Skip 1跳過原標題列:

Get-Content testdata.csv | Select -Skip 1 | ConvertFrom-Csv -Header "Column1","Column2","Column3","Column4" | sort -Unique -Property Column1 | % {"{0},{1},{2},{3}" -f $_.Column1, $_.Column2, $_.Column3, $_.Column4} | set-content output.csv 
+0

如果在沒有import-csv的情況下執行此操作(例如,如果他們想專門將標題名稱轉換爲編號列。 –