我有两个文本文件都有这样的数据:
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输出。但是我期待的不仅仅是这个。
答案 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