2012-06-06 43 views
1

我有一個原始文件列表和一個包含985257行和984997行的重複驅動器。使用sed來刪除類似文件中存在的行

由於行數不匹配我確定某些文件沒有重複。

爲了確定哪些文件不存在我希望使用sed通過從源列表中刪除重複列表中存在的任何行來過濾原始文件列表。

我曾考慮過在Excel中使用匹配公式,但由於程序崩潰的行數。我認爲在sed中使用這種方法將是一個可行的選擇。

但是到目前爲止,我的方法還沒有成功。

echo "Start" 
# Cat the passed argument which is the duplicate file listing 
for line in $(cat $1) 
do 
    #sed the $line variable over the larger file and remove 
    #sed "${line}/d" LiveList.csv 
    #sed -i "${line}/d" LiveList.csv 
    #sed -i '${line}' 'd' LiveList.csv 
    sed -i "s/'${line}'//" /home/listings/LiveList.csv 
done 

存在被創建並填充到列表文件的103.4mb但是上市文件本身並沒有根本改變的臨時文件。

我的其他問題是,因爲在Windows中創建了列表,因此'\'字符可能會逃避導致不匹配的字符串,因此不會進行任何更改。

Example path: 
Path,Length,Extension 
Jimmy\tail\images\Jimmy\0001\0014\Text\A0\20\A056TH01-01.html,71982,.html 

請大家幫忙。

回答

3

這可能會爲你工作:

sort orginal_list.txt duplicate_list.txt | uniq -u 
+0

完美。它的運行速度也非常快。非常感謝。 –

0

我想到的第一件事就是使用rsync來儘可能快地複製丟失的文件。它真的有奇效。

如果不是,您可以先對這兩個文件進行排序以確定它們的不同之處。您可以使用一些paste技巧來放置並排差異,或者甚至可以使用並排輸出diff。當訂購文件時,我認爲diff很容易找到添加的行。

+0

看到的文件複製的arent有它們標記爲病毒,所以複製他們心不是一個選項的可能性,我需要一個列表。我正在運行kd​​iff做一個並排比較,但與文件的數量,這是不切實際的,一旦30個文件丟失,這兩個文件根本沒有對齊。腳本解決方案將確保沒有手動錯誤,併爲兩個輸出中的不同文件給出一個不錯的列表。 –

+0

病毒!?!?啊,這些時間很久以前,當我使用Windows時...再也不用了:)無論如何,你可以增加搜索diff程序的窗口,讓它更加努力地嘗試。另外,一個腳本解決方案將會讓你真正變得很長,至少是sed和朋友。也許用perl你會得到更好的結果。 –