假设我在文件 f1、f2 中有两个数字列表,每个数字每行一个。我想看看第一个列表中有多少数字不在第二个列表中,反之亦然。目前我正在使用 grep -f f2 -v f1 然后使用 shell 脚本重复此操作。这很慢(二次时间很痛)。有没有更好的方法来做到这一点?
问问题
8375 次
3 回答
8
我喜欢这种事情的“通讯”。(文件需要排序。)
$ 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
$
于 2009-10-21T15:15:53.960 回答
2
难道你不能把每个数字放在一行中,然后diff
(1)他们吗?您可能需要事先对列表进行排序,但要使其正常工作。
于 2009-10-21T11:35:44.640 回答
1
在一个文件是另一个文件的子集的特殊情况下,以下内容:
cat f1 f2 | sort | uniq -u
将仅列出较大文件中的行。当然,管道wc -l
将显示计数。
但是,这与您描述的不完全一样。
这种单线经常满足我的特殊需求,但我希望看到更通用的解决方案。
于 2009-10-21T12:08:40.030 回答