我确信我曾经发现过一个shell命令,它可以从两个或多个文件中打印公共行。它叫什么名字?

它比diff简单多了。


当前回答

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

这个应该可以了。

其他回答

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

这个应该可以了。

这不是你想问的,但我认为这对于描述一个稍微不同的场景还是有用的

如果你只是想快速确定一堆文件之间是否有重复的行,你可以使用这个快速解决方案:

cat a_bunch_of_files* | sort | uniq | wc

如果你得到的行数比你得到的少

cat a_bunch_of_files* | wc

然后是一些重复的线条。

fgrep -v -f 1.txt 2.txt > 3.txt

给出了两个文件的区别(在2.txt和不在1.txt中的文件),你可以很容易地做一个

fgrep -f 1.txt 2.txt > 3.txt

收集所有公共行,这应该为您的问题提供一个简单的解决方案。如果你已经对文件进行了排序,你仍然应该使用通信。的问候!

注意:你可以用grep -F代替fgrep。

你要找的命令是通讯

comm -12 1.sorted.txt 2.sorted.txt

在这里:

-1:删除列1 (1.sort .txt中唯一的行)

-2:删除列2 (2.sort .txt中唯一的行)

awk 'NR==FNR{a[$1]++;next} a[$1] ' file1 file2