两个文件之间的差异,不进行排序。

8 浏览
0 Comments

两个文件之间的差异,不进行排序。

我有文件file1file2,其中file2file1的一个子集。这意味着,如果我遍历file1,有一些行在file2中,有一些行不在file2中,但是file2中没有一行不在file1中。文件中可能有多行具有相同的内容。现在我想要得到它们之间的差异,也就是所有在file1中但不在file2中的行。\n根据这个广受欢迎的答案\n

\ndiff(1)不是答案,comm(1)才是。\n

\n(出于某种原因)\n但是据我了解,对于comm,文件需要先排序。问题是:这两个文件都是有序的(而不是排序的!),而且需要保持这个顺序。所以我真正想要的是遍历file1,检查每一行是否也在file2中。如果不在,就写入file3。如果相同的内容出现多次,应该保留多次!\n有没有办法在命令行中做到这一点?

0
0 Comments

不排序的情况下比较两个文件的差异是一种需求。为了避免使用临时文件,可以使用进程替代来实现这一点。可以使用以下命令进行比较:

diff <(sort file1) <(sort file2)
# 或者
comm <(sort file1) <(sort file2)

另外,还可以使用以下命令进行比较(适用于短行文本文件):

diff -a --suppress-common-lines -y file2 file1 | sed 's/\s*>.//'

其中,第一个命令会对两个文件进行排序后再进行比较,第二个命令会将两个文件进行比较并去掉相同行,最后通过sed命令对输出结果进行处理。

出现这个问题的原因是因为需要比较两个文件的差异,但不希望对文件进行排序。解决方法是使用进程替代进行比较,或者使用另一种方法进行比较并对输出结果进行处理。这样可以实现在不排序的情况下比较两个文件的差异,同时保留原始文件的顺序。

0
0 Comments

在这段内容中,作者想要找出两个文件之间的差异,并尝试使用GNU grep命令来实现。作者首先使用了以下命令:grep -vFf file2 file1 > file3,然后更新了命令为:grep -vxFf file2 file1 > file3

作者首先对比了文件的开头几行,认为找到了解决方法。然而,作者发现行号不一致,希望得到的行号是5213,但实际上是5211,这个差异虽然很小,但是并不能完全解决问题。

作者请求上传文件1和文件2的位置,可能是为了更好地理解问题。

作者提到了另一个可能的差异,即文件1中可能存在重复的行(a b a与a b)。作者问道,第二行a应该被视为差异吗?

根据以上内容,我们可以得出以下结论:

问题的出现原因是由于使用GNU grep命令时,无法准确地找到两个文件之间的差异。

解决方法可能是重新审查和修正使用的grep命令,或者尝试其他方法来比较两个文件的差异。

0