使用 shell 脚本比较两个列表
假设我在文件 f1、f2 中有两个数字列表,每个数字每行一个。我想看看第一个列表中有多少数字不在第二个列表中,反之亦然。目前我正在使用 grep -f f2 -v f1,然后使用 shell 脚本重复此操作。这非常慢(平方时间很痛苦)。有更好的方法吗?
Suppose I have two lists of numbers in files f1, f2, each number one per line. I want to see how many numbers in the first list are not in the second and vice versa. Currently I am using grep -f f2 -v f1 and then repeating this using a shell script. This is pretty slow (quadratic time hurts). Is there a nicer way of doing this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我喜欢用“comm”来形容这类事情。
(文件需要排序。)
I like 'comm' for this sort of thing.
(files need to be sorted.)
难道您不能将每个数字放在一行中,然后对它们进行
diff
(1) 吗?您可能需要事先对列表进行排序,但要使其正常工作。Couldn't you just put each number in a single line and then
diff
(1) them? You might need to sort the lists beforehand, though for that to work properly.在特殊情况下,一个文件是另一个文件的子集,以下内容:
将仅列出较大文件中的行。当然,通过管道传输到
wc -l
将显示计数。然而,这并不完全是你所描述的。
这个单行经常满足我的特殊需求,但我希望看到一个更通用的解决方案。
In the special case where one file is a subset of the other, the following:
would list the lines only in the larger file. And of course piping to
wc -l
will show the count.However, that isn't exactly what you described.
This one-liner serves my particular needs often, but I'd love to see a more general solution.