比较两个文件并将差异追加到末尾。
比较两个文件并将差异追加到末尾。
我想比较两个文件,假设为file1
和file2
,并输出两个新文件,假设为file1.out
和file2.out
,其中包含根据diff file1 file2
得出的相同行,这些相同行将首先出现,然后是file1
中不在file2
中的行,这些行将附加到file1.out
的末尾,以及file2
中但不在file1
中的行,这些行将附加到file2.out
的末尾。\n例如,假设我有file1
:\nA\nB\nC\nE\n
\n和file2
:\n
A C D E
\n我希望共同的行A
,C
和E
按照它们的原始顺序首先出现在修改后的文件file1.out
和file2.out
中,而不同的行B
和D
将分别移动到末尾。根据我的例子,这将得到file1.out
:\n
A C E B
\n和file2.out
:\n
A C E D
\n更一般地说,我的输入文件可能有成千上万行,其中大部分相同,但有一些零散的差异,我希望将它们推到末尾以便更容易进行目视检查。\n我查看了类似的相关查询,例如这里(Compare two files line by line and generate the difference in another file),但在这里没有找到我所寻找的解决方案。如果您知道如何生成上述描述的输出,将不胜感激。
比较两个文件并将差异追加到末尾这个问题的出现原因是需要找到一种方法来比较两个文件,并将它们的差异追加到另一个文件的末尾。解决方法是使用diff命令来比较两个文件,并使用grep和sed命令来重新构建所需的输出文件。
具体的解决方法如下:
1. 使用diff -u <large number> file1 file2
命令来比较两个文件,并将结果输出到标准输出。
2. 使用sed '1,3d' > tmp
命令删除diff输出的前三行,因为它们不是实际的文件内容。
3. 使用grep '^ ' tmp | sed 's/^ //' > file1.out
命令提取在两个文件中都存在的行,并将结果输出到file1.out文件。
4. 使用cp file1.out file2.out
命令将file1.out文件复制为file2.out文件,以保持两个输出文件的一致性。
5. 使用grep '^-' tmp | sed 's/^-//' >> file1.out
命令提取只在file1中存在的行,并将结果追加到file1.out文件。
6. 使用grep '^+' tmp | sed 's/^+//' >> file2.out
命令提取只在file2中存在的行,并将结果追加到file2.out文件。
需要注意的是,如果file1和file2是相同的,那么输出的文件将是空的。
关于'head: cannot open '+3' for reading: No such file or directory'错误的解决方法是使用sed '1,3d'
来删除文件的前三行,而不是使用tail +3
。这是因为不同版本的tail命令支持的语法不同,而sed命令更加通用。
总结起来,通过使用diff命令比较两个文件,并结合grep和sed命令重新构建输出文件,可以解决比较两个文件并将差异追加到末尾的问题。这个方法可以方便地获取文件之间的差异,并将其应用于其他需要这些差异的场景中。