2013-03-03 111 views
0

我是Powerhell的新手。目前我們需要一個poweshell腳本來比較兩個大的(100000行和n列(n> 300,列標題是每個星期三對應的日期).n的值每週都在文件中不斷遞增。比較文件(當前周和上週),並且需要確保兩個文件之間的唯一區別是最後一列。從powershell中的csv文件中刪除最後一列

我已經經歷了一些論壇和博客,並且我只能做很少的因爲我的無知

如果有一種方法可以從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) 
    } 

乾杯, 阿尼爾

回答

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; 

這將刪除每個輸入文件的最後一列,並指出剩餘內容是否不同。

+0

嗨,謝謝你的回答。實際上最後一列名稱每週變化不定,我們正在尋找一個opton以動態方式查找當前文件的最後一列名稱。 – Anil 2013-03-03 21:02:58

+0

此外,我們需要刪除當前文件中的最後一列。 – Anil 2013-03-03 21:08:40

+0

您的第二條評論已被編輯解決。只要刪除'選擇對象'。 – alroc 2013-03-03 21:14:46

1

根據alroc給出的答案,您應該能夠在CSV文件的第一行使用拆分操作獲取最後一列名稱,然後使用-ExcludeProperty參數。

但是,這個比較對象命令不適用於我,但它確實將正確的數據拉回到每個變量中。

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

import-csv和export-csv都提供排除列的機會。

import-csv具有-header選項,您只需簡單命名傳入標題並排除最後一個列標題即可。如果有10列,則只有名稱9.最後一列將被排除。

對於export-csv,請選擇要寫出的列(| select col1,col2,col3 | export-csv ...),並且不要選擇您要排除的列。

+0

嗨,詹金斯先生,謝謝你的迴應。但是大約有300列,很難列出給用戶 – Anil 2013-03-05 11:01:58