N个文件的交集

时间:2016-10-24 15:01:57

标签: bash shell intersection

我在bash中遇到了一些问题。

我有N个包含文件名的文件,我想找到所有文件中包含的文件名列表(文件的交集)。

当有2个文件时,我找到了这个解决方案:sort file1 file2 | uniq -d,这实际上是在做我想要的。

但是如何将它推广到同一文件夹中的N个文件?

File1

    1 
    2 
    3 
    4

File2

    1 
    4

File3

    2 
    3 
    4

Output expected:

    4

提前致谢, 最诚挚的问候。

1 个答案:

答案 0 :(得分:3)

我不是Marc B,但仍然是,这是他的想法的实现:

intersect() {
    sort "$@" | uniq -cd | grep "^[^0-9]*$# "
}

# usage example
intersect file1 file2 file3

[编辑:]为了解决同一文件中重复行的问题,我会做这样的事情:

intersect() {
    for file in "$@"; do
        sort -u "$file"
    done | sort | uniq -cd | grep "^[^0-9]*$# "
}