2013-04-12 35 views
0

我有兩個文件,我想比較。第一個是製表符分隔,第二個是逗號分隔,並且都以ID開頭。我想匹配這些ID並做兩件事。首先,我想打印出兩個文件之間匹配的所有文件。然後(如果可能)我想打印到一個單獨的文件中所有不匹配的文件。 這些文件是這樣的: (逗號隔開)文件之間的字符串匹配Linux

S-3DFSG,0,254654,3,e /// x, /// 5 
S-8FGDG,6,464782,6,i /// n /// n /// e /// n, ////
S-4SKDH,0,445676,3,n /// e /// p, /// /// F 

(製表符分隔)

S-3DGSF DG 2 5 7 DF 2 2 4684648654 
S-4GXBG DF 6 2 4 FD 7 1 2415244459 
S-3DFST GA 0 8 4 CF 9 8 2 

我試圖

grep -F -wf file1 file2 > incommon.txt 

對於從這些匹配的grep固定圖案-only詞語文件

但我沒有得到任何輸出... 有沒有人有任何建議,我可以如何改善?我曾考慮過正則表達式,但我並不精通它的使用。我不介意使用它。

+0

你在機器上安裝了python嗎? – ChaseTheSun

+0

@ChaseTheSun我不確定...我不是機器上唯一的用戶。我將如何檢查? – Stephopolis

+0

在命令提示符下輸入'python'或'whereis python'或'哪個python'或'find/-name python' – ChaseTheSun

回答

1

analyze.py:

import re 

f = open('tab.txt', 'r') 
data_tab = f.read() 
f.close() 

f = open('csv.txt', 'r') 
data_csv = f.read() 
f.close() 

matches_tab = re.findall(r'^([^\t]+)', data_tab, re.M) 
matches_csv = re.findall(r'^([^,]+)', data_csv, re.M) 

common = set(matches_tab) & set(matches_csv) 
not_common = set(matches_tab)^set(matches_csv) 

f = open('common.txt', 'w') 
for el in common: 
    f.write(el) 
    f.write('\n') 
f.close() 

f = open('not_common.txt', 'w') 
for el in not_common: 
    f.write(el) 
    f.write('\n') 
f.close() 

保存在一個名爲analyze.py並通過運行腳本文件:

python analyze.py 

更改tab.txt你的標籤文件名,CSV .txt分隔爲逗號分隔的文件名,並且您的列表應該被轉儲到工作目錄中。 如果您有任何問題,請告訴我。

+1

這很好用。自從我使用Python之後已經有很長一段時間了,因爲你看起來精通SUPER,所以我不得不問,你有任何首選的參考資料來引用/學習/修改python嗎? – Stephopolis

+0

我很高興它運作良好。 python網站很有幫助,就像http://www.sthurlow.com/python/。 (我從字面上只在7天前開始Python編碼) – ChaseTheSun

+0

非常感謝!我真的很感激 – Stephopolis

1

如果您仍然想這樣做的外殼,對於「普通」你可以使用:

sed 's/\([^,]*\),.*/\1/' commed.txt > __ids.txt 
grep -F -f __ids.txt $f tabbed.txt 
rm -f __ids.txt 

,併爲「不常見」:

sed 's/\([^,]*\),.*/\1/' commed.txt > __ids.txt 
grep -F -v -f __ids.txt $f tabbed.txt 
sed 's/\([^\t]*\)\t.*/\1/' commed.txt > __ids.txt 
grep -F -v -f __ids.txt $f tabbed.txt 
rm -f __ids.txt 

在哪裏「 commed.txt「是文件逗號分隔,」tabbed.txt「是文件製表符分隔。

如果ID可能出現在第二個文件的其他地方,則可能會失敗!如果ID不能被誤認爲正則表達式(沒有.,,,\,*等),那麼可以使用「grep」的更健壯的解決方案。

+0

你可能會發布/指導我發佈正則表達式解決方案的帖子嗎?正如我在文章中提到的,我想過使用它,但不確定如何去做。儘管我想學習! – Stephopolis

相關問題