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

它比diff简单多了。


当前回答

要轻松地将comm命令应用到未排序的文件,请使用Bash的进程替换:

$ bash --version
GNU bash, version 3.2.51(1)-release
Copyright (C) 2007 Free Software Foundation, Inc.
$ cat > abc
123
567
132
$ cat > def
132
777
321

因此,文件abc和def有一行相同的行,即带有“132”的行。 对未排序的文件使用comm:

$ comm abc def
123
    132
567
132
    777
    321
$ comm -12 abc def # No output! The common line is not found
$

最后一行没有输出,公共行没有被发现。

现在使用comm对已排序的文件进行排序,使用进程替换对文件进行排序:

$ comm <( sort abc ) <( sort def )
123
            132
    321
567
    777
$ comm -12 <( sort abc ) <( sort def )
132

现在我们到了132线!

其他回答

perl -ne 'print if ($seen{$_} .= @ARGV) =~ /10$/'  file1 file2

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

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

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

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

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

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中唯一的行)

也许你指的是通讯?

逐行比较排序文件FILE1和FILE2。 在没有选项的情况下,生成三列输出。列一个 包含FILE1列特有的行 Two包含唯一的行 FILE2和第三列包含两个文件的公共行。

找到这些信息的秘密是信息页。对于GNU程序,它们比手册页要详细得多。尝试info coreutils,它会列出所有有用的小utils。