我确信我曾经发现过一个shell命令,它可以打印两个或更多文件中的公共行。它叫什么名字?
它比diff
简单得多。
发布于 2014-10-12 05:50:39
为了补充Perl单行程序,下面是它的awk
等价物:
awk 'NR==FNR{arr[$0];next} $0 in arr' file1 file2
这会将所有行从file1
读取到数组arr[]
中,然后检查file2
中的每一行是否已经存在于数组中(即file1
)。找到的行将按它们在file2
中出现的顺序打印。请注意,比较in arr
使用file2
中的整行作为数组的索引,因此它只报告整行的精确匹配。
发布于 2015-01-21 01:21:17
而
grep -v -f 1.txt 2.txt > 3.txt
给出了两个文件( 2.txt和1.txt中没有的文件)的区别,您可以很容易地执行
grep -f 1.txt 2.txt > 3.txt
收集所有的公共线路,这将为您的问题提供一个简单的解决方案。如果你已经对文件进行了排序,那么你还是应该使用comm
。致以问候!
发布于 2017-07-21 19:14:15
如果这两个文件尚未排序,您可以使用:
comm -12 <(sort a.txt) <(sort b.txt)
并且它可以正常工作,避免在执行comm -12 a.txt b.txt
时出现错误消息comm: file 2 is not in sorted order
。
https://stackoverflow.com/questions/373810
复制相似问题