定期接收我們無法控制的外部來源的CSV文件。這些文件是當前記錄的完整集合;但是,自上次以來刪除的任何記錄都不存在。我們想比較這兩個文件並創建一個單獨的已刪除記錄文件,以便我們可以對它們進行一些額外的處理。在另一個領域的應用程序中,我們有一個商業分類包(CoSort),它可以實現這一功能;然而,我們在這裏沒有訪問權限。儘管如此,這些數量並不是那麼大,看起來這是標準或免費工具可能很容易處理的事情。理想情況下,這將採用Windows批處理文件的形式,但Perl或awk解決方案也可以。例如輸入文件:在Windows中,如何比較兩個文件並僅返回第一個文件中原來存在的第二個文件中缺少的記錄?
上一個文件:
X_KEY,X_NAME,X_ATTRIBUTE
123,Name 123,ATT X
111,Name 111,ATT X
777,Name 777,ATT Y
傳入的文件:
X_KEY,X_NAME,X_ATTRIBUTE
777,Name 777,ATT Y
123,Name 123,ATT CHANGED
生成的文件應至少包括:
111,Name 111
但是,如果被刪除的屬性記錄也通過,這很好。
到目前爲止,我有一個使用免費軟件CMSort兩個文件減去頭記錄進行排序的批處理文件,以使其更容易爲某些類型的DIFF過程:
REM Sort Previous File, Skip Header
C:\Software\CMSort\cmsort.exe /H=1 x_previous.txt x_previous_sorted.txt
REM Sort Incoming File, Skip Header
G:\Software\CMSort\cmsort.exe /H=1 x_incoming.txt x_incoming_sorted.txt
但「比較,只有展示從第一個文件丟失的記錄'位是逃避我。複雜性的一部分是許多屬性可以在剩下的記錄中改變,所以它不是純粹的差異。然而,它感覺就像是一個專門的diff命令 - 它只限於檢查關鍵字段,而不是整個記錄。不過,我似乎無法得到正確的語法。想法?記錄數不應超過5萬條記錄。
注意:如果這是SQL並且數據位於表中,我們可以使用EXCEPT operator,但在這種情況下將數據移到數據庫不是一個選項。
既然你提到差異,這是值得注意的是,diffutils的是可用於Windows : http://gnuwin32.sourc eforge.net/packages/diffutils.htm – si28719e 2009-05-05 23:54:33