我确信我曾经发现过一个shell命令,它可以从两个或多个文件中打印公共行。它叫什么名字?
它比diff简单多了。
我确信我曾经发现过一个shell命令,它可以从两个或多个文件中打印公共行。它叫什么名字?
它比diff简单多了。
当前回答
如果这两个文件还没有排序,你可以使用:
comm -12 <(sort a.txt) <(sort b.txt)
它将工作,避免错误消息comm: file 2不是有序的 当执行comm -12 a.t xxb .txt时。
其他回答
rm file3.txt
cat file1.out | while read line1
do
cat file2.out | while read line2
do
if [[ $line1 == $line2 ]]; then
echo $line1 >>file3.out
fi
done
done
这个应该可以了。
为了补充Perl的一行代码,下面是它在awk中的等价代码:
awk 'NR==FNR{arr[$0];next} $0 in arr' file1 file2
这将把file1中的所有行读入数组arr[],然后检查file2中的每一行是否已经存在于数组中(即file1)。找到的行将按照它们在file2中出现的顺序打印出来。 请注意,arr中的比较使用从file2开始的整行作为数组的索引,因此它只报告整行上的精确匹配。
awk 'NR==FNR{a[$1]++;next} a[$1] ' file1 file2
你要找的命令是通讯
comm -12 1.sorted.txt 2.sorted.txt
在这里:
-1:删除列1 (1.sort .txt中唯一的行)
-2:删除列2 (2.sort .txt中唯一的行)
perl -ne 'print if ($seen{$_} .= @ARGV) =~ /10$/' file1 file2