2013-10-30 25 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