如何从Bash中的另一个中减去一个集合?Bash集合减法
这类似于:Is there a "set" data structure in bash?但不同的,因为它要求如何执行减法,与代码
- SET1:N由过滤线作为输出
- SET2:M线作为输出由滤波器
如何获得:
- SET3:与N条不显示我的所有行n M
如何从Bash中的另一个中减去一个集合?Bash集合减法
这类似于:Is there a "set" data structure in bash?但不同的,因为它要求如何执行减法,与代码
如何获得:
我相信这篇文章对你有用:Set Operations in the Unix Shell。特别的,补集操作就是你所要求的。
comm -23 <(command_which_generate_N|sort) <(command_which_generate_M|sort)
COMM而不选项显示输出的3列:1:仅在第一个文件,2:只有在第二个文件中,3:在这两个文件。 -23删除第二和第三列。
输入文件必须排序。
GNU排序和comm取决于语言环境,例如输出顺序可以是不同的(但内容必须是相同的)
(export LC_ALL=C; comm -23 <(command_which_generate_N|sort) <(command_which_generate_M|sort))
I wrote a program recently called Setdown,它从CLI设置操作(如组差异)。
它可以通过书面形式类似于你在一个Makefile中写的定义执行组操作:
someUnion: "file-1.txt" \/ "file-2.txt"
someIntersection: "file-1.txt" /\ "file-2.txt"
someDifference: someUnion - someIntersection
它很酷,你应该检查一下。我个人不推荐“在unix shell中设置操作”的帖子。如果您确实需要执行许多设置操作,或者您有任何依赖于对方的设置操作,它将无法正常工作。
无论如何,我认为这很酷,你应该完全检查出来。
该网站似乎已关闭。有没有新的网址? – escitalopram 2016-12-14 16:15:16
这是直接链接到源代码的链接:https://bitbucket.org/robertmassaioli/setdown – 2016-12-23 10:43:07
uniq -u
(manpage)往往是列表减法最简单的工具:
使用
uniq [OPTION]... [INPUT [OUTPUT]]
[...]
-u, --unique
only print unique lines
例子:在目录中找到的列表文件,但不能在B
$ ls a
file1 file2 file3
$ ls b
file1 file3
$ echo "$(ls a ; ls b)" | sort | uniq -u
file2
有在这篇文章中的错误通信不能正确使用-n排序,例如:comm <(sort -n <<< 4 $ '\ n'55 $'\ n'7)<(sort -n <<< 2 $'\ n'55 $'\ n'8) – 2012-08-15 05:53:58
这是一个链接专用的答案。 – YSC 2017-07-05 12:04:58