使用linux命令执行set操作

时间:2014-10-30 12:00:22

标签: linux sed

我有以下两个数字列表存储在两个不同的文件中:

File A:
7
1
2
9

File B:
10
8
4
9

现在我想找出设置操作A-B(即只找到A中但不在B中的那些数字)。有什么方法可以使用linux命令(比如sed)做同样的事情。我知道使用python可以做到这一点,但我很想知道是否有可能使用一些linux命令做同样的事情?

2 个答案:

答案 0 :(得分:0)

简单,几乎正常工作的版本是:

grep -v -f file2 file1

即,使用file2中的行作为模式;在file1中匹配它们并打印未找到的(即file1 - file2)。但是,如果file1包含10file2包含1,该怎么办?然后我们遇到了问题,因为子串也匹配。我们可以这样解决:

grep -v -f <(sed 's/\(.*\)/^\1$/' file2) file1

即,预处理file2前置^并附加$,以便匹配整行,而不是file1中的子串。

答案 1 :(得分:0)

diff就是这个工具:

diff f1 f2
1,3c1,3
< 7
< 1
< 2
---
> 10
> 8
> 4

f1具有此唯一编号7,1,2
f2具有此唯一编号10,8,4