比较第一个x个字符的文件

时间:2013-10-30 05:32:32

标签: linux unix command-line compare diff

我有两个文本文件都有这样的数据:

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的示例)字符比较两个文件,以查看它们的不同之处。我尝试了一些我在另一个question中找到的diff命令,这些命令不起作用。我没有想法,所以我转向任何比我更有经验的人。

感谢。

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

这是我的尝试和输出。问题是,我知道文件相差十一行......对应十一个不匹配的值。我不想手工做(谁会这样做)。也许我误读了diff输出。但是我期待的不仅仅是这个。

3 个答案:

答案 0 :(得分:1)

你试过了吗?

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

答案 1 :(得分:0)

首先sort这两个文件然后尝试使用diff

sort file1 > file1_sorted
sort file2 > file2_sorted
diff file1_sorted file2_sorted

排序将有助于按照第一个ID字段排列这两个文件,这样就不会出现不必要的不​​匹配。

答案 2 :(得分: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