2017-06-28 1171 views
2

複数のCSVファイルを1つにまとめる必要があります。各CSVにはヘッダーがあります。列ヘッダーの1つは同一です。理想的には、終了ファイル(all_out.csv)には1つのヘッダーが必要です。Import-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 

を、私はエラー

インポート、CSVで終わる:メンバー "URL" は既に存在しています。

これを無視/修正する方法はありますか?列ヘッダーの

+2

少なくとも1つのCSVに重複する列「URL」があります。 PowerShellはこれをサポートしていません。問題を解決するには、入力ファイルから重複する列を削除します。 –

+1

これらのCSVは実際には同じヘッダーかヘッダーを持っていますか? – Matt

答えて

3

一つは、各CSVは、2つの列ヘッダー 'URL' を有していることを意味

同一でありますか? Import-Csvは、各ヘッダーがプロパティ名になるオブジェクトを作成します。 @{Id=10; Url='example.com'}と同じ名前を再び使用すると衝突します。

Imports-Csvコマンドレットだけで、「異なる列名を使用する」と「ヘッダー行をスキップする」という方法がないため、csvファイルを変更しないと正常に動作しません。

私は考えることができる最も簡単な変更は、例えば、それぞれ1からヘッダ行をドロップすることです:

$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 ... 
+0

私は、各ファイルを 'GC |選択 - スキップ1 | convertfrom-csv'を実行すると、一時ファイルの必要性が省かれます。ユースケースは明らかに変わります。 – Matt

+0

'-Encoding UTF8'を設定する理由はありますか? – Matt

+0

@Mattはいそれも実行可能に見えます。ユニコードコンテンツを持ち、エンコーディング=データを指定していないためです。 ASCIIデータを持ち、UTF8を指定すると=うまく動作します。それをより効くように指定する側では誤りです。 '[pscustomobject] @ {'x' = '↮'}を比較する| epcsv x; gc x'を '[pscustomobject] @ {'x' = '↮'}とすると、 epcsv x -encoding utf8; PowerShell ISEの「gc x」 – TessellatingHeckler

関連する問題