我需要在 PowerShell 中处理具有重复列标题的 csv 文件。他们有重复列的原因超出了我的范围。这就是人生。
我想使用 Import-Csv 以便可以轻松处理数据,但由于存在重复列,我收到此错误:
Import-Csv : The member "PROC STAT" is already present.
At C:\Users\MyName\Documents\SomeFolder\testScript1.ps1:10 char:9
+ $csv2 = Import-Csv $files[0].FullName
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Import-Csv], ExtendedTypeSystemException
+ FullyQualifiedErrorId : AlreadyPresentPSMemberInfoInternalCollectionAdd,Microsoft.PowerShell.Commands.ImportCsvCommand
Run Code Online (Sandbox Code Playgroud)
我可以通过进入每个 csv 文件并删除重复的列来手动修复问题。但这不是一个选择。它们有数百个,并且脚本需要定期运行。理想情况下,我正在寻找一种方法以编程方式删除该列(Import-Csv 不起作用)或以编程方式更改该列的名称(以便我可以 Import-Csv 并将其删除)。有什么建议么?
我的代码循环遍历所有文件:
$files = Get-ChildItem "C:\Users\MyName\Documents\SomeFolder\Data" -Filter *.csv
foreach($file in $files) {
$csv = Import-Csv $file.FullName
}
Run Code Online (Sandbox Code Playgroud)
您可以使用参数指定自定义标头名称Header:
Import-Csv .\file.csv -Header header1,header2,header3
Run Code Online (Sandbox Code Playgroud)
这会将原始标题行视为普通行,因此使用以下命令跳过第一个输出对象Select-Object:
Import-Csv .\file.csv -Header header1,header2,header3 |Select-Object -Skip 1
Run Code Online (Sandbox Code Playgroud)