Bash set subtraction

后端 未结 4 375
长发绾君心
长发绾君心 2021-01-11 10:48

How to subtract a set from another in Bash?

This is similar to: Is there a "set" data structure in bash? but different as it asks how to perform the subtra

4条回答
  •  时光说笑
    2021-01-11 11:25

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

    comm without option display 3 columns of output: 1: only in first file, 2: only in second file, 3: in both files. -23 removes the second and third columns.

    $ 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
    

    Input files must be sorted.

    GNU sort and comm depends on locale, for example output order may be different (but content must be the same)

    (export LC_ALL=C; comm -23 <(command_which_generate_N|sort) <(command_which_generate_M|sort))
    

提交回复
热议问题