0

私はPowerShellを初めて使用します。現在、2つの大きな(100000行とn列(n> 300、列ヘッダーも各水曜日に対応する日付)を比較するための強力なスクリプトが必要です。nの値はファイル内で毎週増加し続けます。ファイル(今週と先週)を比較し、2つのファイルの唯一の違いが最後の列であることを確認する必要があります。

私はいくつかのフォーラムやブログを通過しましたが、無知のために少ししかできませんでした。

PowerShellのcsvファイルから最後の列を削除する方法がある場合は、以下のスクリプトを使用して、前の週のファイルから最後の列を削除した後、前の週のファイルと今週のファイルを比較できる場合があります。

誰かがあなたの苦労して得た知識でここで私を助けてくれるなら、それは本当に役に立ちます


[System.Collections.ArrayList]$file1Array = Get-Content "C:\Risk Management\ref_previous.csv"|Sort-Object
[System.Collections.ArrayList]$file2Array = Get-Content "C:\Risk Management\ref_current.csv"|Sort-Object
$matchingEntries = @()

foreach ($entry in $file1Array) {
    if ($file2Array.Contains($entry)) {
        $matchingEntries += $entry
        } 
    }
foreach ($entry in $matchingEntries){
    $file1Array.Remove($entry)
    $file2Array.Remove($entry)
    }

乾杯、アニル

4

3 に答える 3

1

alrocの回答に基づいて、CSVファイルの最初の行で分割操作を使用して最後の列名を取得し、それを-ExcludePropertyパラメーターで使用できるはずです。

ただし、これに対するCompare-Objectコマンドは機能しませんが、適切なデータを各変数にプルバックします。

$CurrentFile = "C:\Temp\Current.csv"
$PreviousFile = "C:\Temp\Previous.csv"

$CurrentHeaders = gc $CurrentFile | Select -First 1
$CurrentHeadersSplit = $CurrentHeaders.Split(",")
$LastColumn = $CurrentHeadersSplit[-1] -Replace '"'

$Current = Import-Csv $CurrentFile | Select -Property * -ExcludeProperty $LastColumn | Sort-Object
$Previous = Import-Csv $PreviousFile | Sort-Object
Compare-Object $Current $Previous
于 2013-03-03T23:27:01.640 に答える
1

LastCol除外する列名が(実際の列名に合わせて)であると仮定します。

$previous = Import-csv "C:\Risk Management\ref_previous.csv" | Select-Object -Property * -ExcludeProperty LastCol | Sort-Object;
$current = Import-csv "C:\Risk Management\ref_current.csv" | Sort-Object;
Compare-Object $previous $current;

これにより、各入力ファイルから最後の列が削除され、残りのコンテンツが異なるかどうかが示されます。

于 2013-03-03T20:32:46.147 に答える