2013-02-28 68 views
0

來自德國的早上好,抱歉我的英語不好。Powershell:比較2列基於2列的文件

我希望有人能幫助我。

我們必須比較2 .xls或.csv文件和4000多行。 這兩份文件都有一個具有相同交貨單編號的E欄。 這送貨單號不是唯一的,可以是使用次數多次在列E. 每一個交貨單號也有在列D

的件數如果兩個文件送貨單號和數量匹配,我們可以忽略並刪除該行。 比較超過4000行的兩個文件是非常昂貴的,所以我希望能夠與Powershell進行正則表達式的比較。

我的想法: 轉換XLS到CSV和執行以下操作: 閱讀線和使用E列和列E列的D.的foreach項的entry,檢查是否在第二文件存在這個條目。如果條目存在,請檢查D列是否與file1中的相同。 如果兩個Entrys匹配,請刪除或複製兩個文件中的兩條線。

至少我們有兩個Entrys文件,這些文件沒有任務。

這可能嗎?

通過PowerShell的我能處理得很好,但是正則表達式... :/

在此先感謝 丹尼爾

回答

0

如果你認爲你的兩個值作爲一個複合主鍵,它似乎工作。你說E欄中的第一個值不一定是唯一的。你能否告訴我它是否與其數量相結合時總是獨一無二的?無論如何,我建議,爲了處理這個問題,僅僅爲了獲得(Col E,col D)組合的唯一列表,甚至可以只採用「E,D」格式的字符串,只要col E和col D不包含逗號。得到這個唯一值後,把它放在一個散列表中,其格式化值作爲鍵,並將該鍵的文件數組作爲值。

現在您可以有效地查找Col E,Col D組合的哪些文件,因此您應該能夠根據需要處理您的特定用例。

+0

感謝郵政,不是它不唯一。具有相同內容的多個值是可能的!例如:我們有交貨單號453535,數量爲30件。我們有可能再次擁有相同的東西。 – Daniel4711 2013-02-28 11:20:49

+0

你怎麼知道哪個訂單已經履行了? – 2013-02-28 12:01:18

+0

對不起,我認爲這太複雜了。否則我們將不得不解決問題。有可能。用Excel和大量的手工工作。 – Daniel4711 2013-03-03 11:11:45

0

4000行聽起來不是很多。試試這個:假設CSV文件被稱爲 「1.csv」 和 「2.csv」

add-content 3.csv (get-content 1.csv) 
add-content 3.csv (get-content 2.csv) 

import-csv -header A,B,C,D,E,F 3.csv | 
    group E,D | 
    where { $_.count -eq 1 } | 
    foreach { $_.group } | 
    export-csv 3.diff.csv -noTypeInformation 

「3.diff.csv」 將只包含唯一的記錄。

+0

不好意思,我還記得雙方的金額是有差別的。數量是相同的,在文件1中上升,在文件2中下降。謝謝! – Daniel4711 2013-03-01 09:17:55

+0

沒問題。那麼這個解決方案對你有用嗎? – Aryadev 2013-03-01 09:58:16

+0

對不起,回覆遲!這個想法很好,但不幸的是不適合我的目的,因爲這個音符不同於符號 - 或+。 – Daniel4711 2013-03-03 11:08:05