我必须将多个CSV文件合并为一个。每个CSV都有一个标题。其中一个列标题相同。理想情况下,结束文件(all_out.csv)必须有一个标题。
我运行PowerShell代码:
Import-Csv out_1_result.csv,out_2_result.csv,out_3_result.csv,out_4_result.csv,out_5_result.csv,out_6_result.csv,out_7_result.csv,out_8_result.csv,out_9_result.csv,out_10_result.csv,out_11_result.csv,out_12_result.csv,out_13_result.csv,out_14_result.csv,out_15_result.csv,out_16_result.csv,out_17_result.csv,out_18_result.csv,out_19_result.csv,out_20_result.csv,out_21_result.csv,out_22_result.csv,out_23_result.csv,out_24_result.csv,out_25_result.csv,out_26_result.csv,out_27_result.csv,out_28_result.csv |
Export-Csv all_out.csv -NoType
我最终得错了
Import-Csv:成员“URL”已经存在。
有没有办法忽略/解决这个问题?
答案 0 :(得分:4)
其中一个列标题相同
这意味着每个CSV都有两列标题'URL'? Import-Csv
创建对象,其中每个标题都成为属性名称,例如@{Id=10; Url='example.com'}
再次使用相同的名称会发生冲突。
如果没有更改csv文件,这将无法干净地工作,因为没有办法说“使用不同的列名”,也只能使用Import-Csv cmdlet“跳过标题行”。
我能想到的最简单的改变是从每一个中删除标题行,例如:
$CsvFiles = 'out_1_result.csv','out_2_result.csv','out_3_result.csv','out_4_result.csv','out_5_result.csv','out_6_result.csv','out_7_result.csv','out_8_result.csv','out_9_result.csv','out_10_result.csv','out_11_result.csv','out_12_result.csv','out_13_result.csv','out_14_result.csv','out_15_result.csv','out_16_result.csv','out_17_result.csv','out_18_result.csv','out_19_result.csv','out_20_result.csv','out_21_result.csv','out_22_result.csv','out_23_result.csv','out_24_result.csv','out_25_result.csv','out_26_result.csv','out_27_result.csv','out_28_result.csv'
$NewFileNames = $CsvFiles | ForEach-Object {
$NewFileName = $_ + "_noheader.csv"
Get-Content $_ | Select-Object -Skip 1 | Set-Content $NewFileName -Encoding UTF8
$NewFileName # write new name to output stream
}
然后,当它们没有标题行时,将它们全部导入并将标题行指定为参数
Import-Csv -Path $NewFileNames -Header 'Col1', 'Col2', 'Url1', 'Url2' | Export-Csv ...