在Bash中如何从另一个集合中减去一个集合?
这类似于:Is there a "set" data structure in bash?但不同于它询问如何使用代码执行减法
设置1:N行作为过滤器的输出
set2:M行作为滤波器输出
如何获得:
集合3:所有N行中没有M的行

最佳答案

comm -23 <(command_which_generate_N|sort) <(command_which_generate_M|sort)

comm without option显示3列输出:1:仅在第一个文件中,2:仅在第二个文件中,3:在两个文件中。-23删除第二列和第三列。
$ cat > file1.list
A
B
C
$ cat > file2.list
A
C
D
$ comm file1.list file2.list
        A
B
        C
    D
$ comm -12 file1.list file2.list # In both
A
C
$ comm -23 file1.list file2.list # Only in set 1
B
$ comm -13 file1.list file2.list # Only in set 2
D

输入文件必须排序。
GNU sort和comm取决于语言环境,例如输出顺序可能不同(但内容必须相同)
(export LC_ALL=C; comm -23 <(command_which_generate_N|sort) <(command_which_generate_M|sort))

关于bash - bash 减法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11963844/

10-15 16:07