我有两个文件 A 和 B。我想找到 A 中 B 中没有的所有行。在 bash/使用标准 Linux 实用程序中执行此操作的最快方法是什么?到目前为止,这是我尝试过的:
for line in `cat file1`
do
if [ `grep -c "^$line$" file2` -eq 0]; then
echo $line
fi
done
它有效,但速度很慢。有没有更快的方法来做到这一点?
Bash 常见问题解答 http://mywiki.wooledge.org/BashFAQ 描述了用 comm 来做这件事 http://mywiki.wooledge.org/BashFAQ/036,这是规范正确的方法。
# Subtraction of file1 from file2
# (i.e., only the lines unique to file2)
comm -13 <(sort file1) <(sort file2)
diff 不太适合此任务,因为它尝试对块而不是单独的行进行操作;因此,它必须使用的算法更加复杂且内存效率较低。
通讯已Single Unix 规范的一部分 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/comm.html自 SUS2(1997)以来。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)