2013-10-30 23 views
1

的第X號文件,我有一個看起來像這樣兩個文本文件都有數據:比較斷字符

Mon-000101,100.27242,9.608597,11.082,10.034,0.39,I,0.39,I,31.1,31.1,,double with 1355,,,,,,,, 
Mon-000171,100.2923,9.52286,14.834,14.385,0.45,I,0.45,I,33.7,33.7,,,,,,,,,, 
Mon-000174,100.27621,9.563802,11.605,10.134,0.95,I,1.29,I,30.8,30.8,,,,,,,,,, 

我想基於斷Mon-000101的比較兩個文件(作爲一個示例ID)字符來查看它們的不同之處。我嘗試了一些diff命令,我在另一個question中發現了這個命令,但這並不奏效。我沒有想法,所以我轉向比我自己更有經驗的人。

謝謝。

HazMatt:Desktop m$ diff NGC2264_classI_h7_notes.csv /Users/m/Downloads/allfitclassesI.txt 
1c1 
Mon-000399,100.25794,9.877631,12.732,12.579,0.94,I,-1.13,I,9.8,9.8,,"10,000dn vs 600dn brighter source at 6 to 12"" Mon-000402,100.27347,9.59Mon-146053,100.23425,9.571719,12.765,11.39,1.11,I,1.04,I,16.8,16.8,,"double 3"" confused with 411, appears brighter",,,,,,,, 
\ No newline at end of file 
--- 
Mon-146599     Mon-146599 4.54  I 4.54  III 
\ No newline at end of file 

這是我的嘗試和輸出。事情是,我知道這些文件相差十一行......對應着十一個不匹配的值。我不想親手做這件事(誰會?)。也許我誤解了差異輸出。但我希望比這更多。

回答

1

你試過:

diff `cat file_1 | grep Mon-00010` `cat file_2 | grep Mon-00010` 
+0

'週一00010'是一個「虛擬變量」我希望它搜索找到的所有名字的差異(他們是ID)。 – Matt

+0

對不起,但我不明白你想要達到什麼目的。 grep將文件縮小到只包含您要搜索的密鑰並比較它們的那些行。 –

+0

我沒有試圖找到一個單一的密鑰,我試圖找到包含ID號列表的兩個文件中的差異。 'Mon-000101'只是一個這樣的ID的例子。 – Matt

0

首先sort兩個文件,然後嘗試使用diff

sort file1 > file1_sorted 
sort file2 > file2_sorted 
diff file1_sorted file2_sorted 

排序將幫助安排這兩個文件按第一ID字段,讓你不不會產生不需要的不匹配。

0

我不確定你在找什麼,但我會盡力幫忙。否則,你可以給出一些輸入文件和所需輸出的例子。

我的輸入文件是:

prompt> cat in1.txt 
Mon-000101,100.27242,9.608597,11.082,10.034,0.39,I,0.39,I,31.1,31.1,,double with 1355,,,,,,,, 
Mon-000171,100.2923,9.52286,14.834,14.385,0.45,I,0.45,I,33.7,33.7,,,,,,,,,, 
Mon-000174,100.27621,9.563802,11.605,10.134,0.95,I,1.29,I,30.8,30.8,,,,,,,,, 

prompt> cat in2.txt 
Mon-000101,111.27242,9.608597,11.082,10.034,0.39,I,0.39,I,31.1,31.1,,double with 1355,,,,,,,, 
Mon-000172,100.2923,9.52286,14.834,14.385,0.45,I,0.45,I,33.7,33.7,,,,,,,,,, 
Mon-000174,122.27621,9.563802,11.605,10.134,0.95,I,1.29,I,30.8,30.8,,,,,,,,,, 

如果你只是感興趣的 「ID」(這意味着什麼),你必須單獨它。我假設ID是第一個逗號之前的標籤,所以它可以切割以外的所有ID和比較:

prompt> diff <(cut -d',' -f1 in1.txt) <(cut -d',' -f1 in2.txt) 
2c2 
< Mon-000171 
--- 
> Mon-000172 

如果ID比較複雜,你可以使用正則表達式的grep的。


此外diff -y給你一些圖形輸出,哪些行是不同的。您可以使用此僅僅比較完整的文件或與切割用它解釋之前:

prompt> diff -y <(cut -d',' -f1 in1.txt) <(cut -d',' -f1 in2.txt) 
Mon-000101       Mon-000101 
Mon-000171       | Mon-000172 
Mon-000174       Mon-000174