使用Linux命令对两个文件执行“减”操作
我有4个文件按字母顺序排序,A,B,C和D. 这些文件在每行上包含一个字符串。 从本质上讲,需要做的是,B中得到任何东西从A 删除的,其结果将在随后C. 被剥夺的东西,同样,那结果将被剥夺D.使用Linux命令对两个文件执行“减”操作
的是有一种使用Linux命令的方法?
comm
好这一点,无论是:
cat B C D | sort | comm -2 -3 A -
或:
comm -2 -3 A B | comm -2 -3 - C | comm -2 -3 - D
取决于什么是更容易/更清晰的脚本。
我想说这是迄今为止给出的答案中最简单的答案。 – 2009-09-03 02:10:48
grep -x -v -f B A | grep -x -v -f C | grep -x -v -f D
-v开关是逆匹配(即匹配所有除外)。 -f开关将一个文件与一个模式列表进行匹配。 -x开关强制它匹配整行(以便作为其他行的子字符串的行不会导致较长的行被删除)。
看看join
命令。阅读它的手册页,你应该找到你想要的。
join A B | join - C | join - D
这不是完全相反,你想要什么?这会给你所有四个文件中存在的行。此外,如果您的任何线条中有空格,则不起作用。 – 2009-09-03 02:00:22
是的。对不起,直接加入应该这样做。 – biznez 2009-09-03 02:03:02
但仍然...我不是专家加入,但从阅读手册页,加入AB会给你所有在A和B,而不是A,但不是B,这是你问的。从我可以告诉基于连接的答案到你原来的问题会是这样的:'join -t \ n -v 1 A B | join -t \ n -v 1 - C | join -t \ n -v 1 - D' – 2009-09-03 02:07:54
差异可能会起作用。你为什么给出提示但问问题?这是功课吗? – 2009-09-03 01:20:45
不是。事实上,如果你给它正确的标志,差异将起作用。但我不确定旗帜。 – biznez 2009-09-03 01:33:59