获取两个文件之间交集的最有效方法是什么?有:
sort file1 file2 | uniq -d
答案1
使用grep
命令行如下:
grep -Fx -f file1 file2
答案2
如果要合并两个文件的内容,请运行以下命令,
awk 'NR==FNR' file1 file2
答案3
假设 file1 = 'A\nA' 且 file2 = 'A\nA\nA'。交集只是 'A' 还是 'A\nA'?换句话说,同一行在两个文件中出现的次数是否相关?
如果只是“A”,这将有效:
sort <(sort file1 | uniq) <(sort file2 | uniq) | uniq -d
问题中给出的方法的问题是,即使两个文件中都不存在某一行,如果在其中一个文件中重复,它也会出现在结果中。因此,我们需要先使用 删除文件内的重复项sort fileX | uniq
。
如果是“A\nA”,那么这将起作用:
sort <(sort file1 | awk '{if ($0 == prev) c++; else c=0; print c, $0; prev = $0;}') <(sort file2 | awk '{if ($0 == prev) c++; else c=0; print c, $0; prev = $0;}') | uniq -d | cut -d' ' -f2-
我可以想到更多单行代码(使用 awk、sort、uniq 和 cut),但没有一个比这个更简单。当然,这并不意味着没有更简单的解决方案。