2017-11-06 256 views
0

Powershellを使用してCSVファイル内の重複を削除する方法について、親切な助けを求めます。私はすでにこれについての記事があることを知っていますが、私はそれを助けるものを見つけることができないようです。Powershellを使用してCSVファイルの重複をマージして削除する方法

同じヘッダーを持つ2つのCSVファイルをマージし、最初の列に記載されているIDに基づいて結果ファイルの重複を削除してから、同じCSVファイルに配置しようとしています。

次のようにファイルのプロパティは次のとおりです。 enter image description here

をそして私は、ソートやユニークな方法を使用しようとすると、私は以下の(ないテーブルを取得: enter image description here

ここに私のコードですこれまで: enter image description here

#### 
#MERGE 
$getFirstLine = $true 
    get-childItem "C:\IGHandover\Raw\IG_INC*.csv"| foreach { 
    $filePath = $_ 
    $lines = $lines = Get-Content $filePath 
    $linesToWrite = switch($getFirstLine) { 
      $true {$lines} 
      $false {$lines | Select -Skip 1} 
    } 
    $getFirstLine = $false 
    Add-Content "C:\IGHandover\new.csv" $linesToWrite 
    } 

#### 
#REMOVE DUPLICATES 
Import-Csv "C:\IGHandover\new.csv" | Sort inc_number -Unique | 
    Set-Content "C:\IGHandover\new.csv" 

私はPowerShellを使用し本当に新たなんだと異なる技術を習得するのが大好きだ、私は本当でしょう。あなたの助けに感謝します。

ありがとうございました!

+0

それはそれを再現することはより困難だとして画像を、コードを追加していないしてくださいと同じことをしたいのですが、誰に役立ちます願っています。 – Manu

+0

こんにちはマヌー。ここで私はこれまで持っているものです。 #### #MERGE $ getFirstLine = $真 が得る-ChildItemコマンドレットを "C:\ IGHandover \生\ IG_INC * .CSV" | foreach { $ filePath = $ _ $ lines = $ lines = Get-Content $ filePath $ linesToWrite = switch($ getFirstLine){ $ true {$ lines} $ false {$ lines | "C:\ IGHandover \ new.csv" -skip 1}} $ getFirstLine = $ falseを アドインのコンテンツを選択して$ linesToWrite } #### #REMOVE DUPLICATES インポート、CSV「C:\ IGHandover \ new.csv "|ソートinc_number - ユニーク| セット内容「C:\ IGHandover \ new.csv」 –

+0

Triziaは、コメントではなく、あなたの質問にコード(コード+結果)を追加します。質問の機密情報を交換してください。 – Manu

答えて

0

は、Get-コンテンツまたはSet-コンテンツインポートやエクスポートをCSVファイルを使用しないでください

Import-Csv (Get-ChildItem 'C:\IGHandover\Raw\IG_INC*.csv') |   
     Sort-Object -Unique inc_number | 
      Export-Csv 'C:\IGHandover\new.csv' -NoClobber -NoTypeInformation 
+0

こんにちはVincent K!私も同じことをしましたが、何らかのエラーが発生しているので、-Forceパラメータを追加しましたが、実際にうまくいきます!ありがとうございました! –

0

私はHandoverINC.csvNew.csvから同じ主キー(inc_number)とHandoverINC.csvにすべてのレコードを置き換え、新しいテーブルからレコード(New.csv)と(HandoverINC.csv)あなたがテーブルを更新したいと思います。 New.csvの新しいレコードをHandoverINC.csvに追加します(基本的には、SQLではFull Joinと呼ばれます)。で説明Join-Objectを使用して

https://stackoverflow.com/a/45483110/1701026

Import-CSV .\HandoverINC.csv | FullJoin (Import-CSV .\New.csv) inc_number {$Right.$_} | Export-CSV .\HandoverINC.csv 
0

リーフェンKeersmaekersとのVivek Kumar氏によって示唆されるように私は自分のコードにいくつか変更を加えました:

  • マージされた内容を入れてください新しいCSVファイルへのOA一時ファイル
  • インポートマージ内容をcsvファイル
  • ソート参照の列と
  • 独自のパラメータを使用するエクスポート結果

私は私のコードがあることがわかりました

#MERGE 
$getFirstLine = $true 
get-childItem "C:\IGHandover\Raw\IG_INC*.csv"| 
foreach { 
    $filePath = $_ 
    $lines = $lines = Get-Content $filePath 
    $linesToWrite = switch($getFirstLine) { 
    $true {$lines} 
    $false {$lines | Select -Skip 1}} 
    $getFirstLine = $false 
    Add-Content "C:\IGHandover\HandoverINCtemp.csv" $linesToWrite } 

#REMOVE DUPLICATES 
Import-Csv "C:\IGHandover\HandoverINCtemp.csv" | Sort inc_number -Unique | 
    Export-Csv "C:\IGHandover\HandoverINC.csv" -NoClobber -NoTypeInformation -Force 
    Remove-Item "C:\IGHandover\HandoverINCtemp.csv" 

ヴィンセントによって示唆されるように、(同じヘッダを持つ重複をマージし、除去する)簡単にするために:

ヴィンセントKのと同様
Import-Csv (Get-ChildItem "C:\IGHandover\Raw\IG_INC*.csv") | Sort inc_number -Unique | 
    Export-Csv "C:\IGHandover\HandoverINC.csv" -NoClobber -NoTypeInformation -Force 

10は、私は、これは自分のファイル

+0

このコードはあなたのcsvファイルをマージします: "Import-Csv(Get-ChildItem 'C:\ IGHandover \ Raw \ IG_INC * .csv')....すべてのCSVファイルは同じヘッダを持っています –

+0

ありがとう、Vincent!それは事を単純化する –

関連する問題