假设我在文件 f1、f2 中有两个数字列表,每个数字每行一个。我想看看第一个列表中有多少数字不在第二个列表中,反之亦然。目前我正在使用 grep -f f2 -v f1,然后使用 shell 脚本重复此操作。这非常慢(二次方时间很痛苦)。有更好的方法吗?

有帮助吗?

解决方案

我喜欢'comm'这种事情。 (文件需要排序。)

$ cat f1
1
2
3
$ cat f2
1
4
5
$ comm f1 f2
        1
2
3
    4
    5
$ comm -12 f1 f2
1
$ comm -23 f1 f2
2
3
$ comm -13 f1 f2
4
5
$ 

其他提示

难道你不能把每个数字放在一行然后 diff (1)吗?您可能需要事先对列表进行排序,但要正常工作。

在特殊情况下,如果 一个文件是另一个文件的子集, , 下列:

cat f1 f2 | sort | uniq -u

会列出这些行 只有在 较大的文件。当然还有管道 wc -l 将显示计数。

然而,这并不完全是你所描述的。

这个单行经常满足我的特殊需求,但我希望看到一个更通用的解决方案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top