bash删除包含来自另一个文件的行的文件中的行

时间:2014-10-05 17:33:28

标签: bash file shell line

file1包含:

someword0
someword2
someword4
someword6
someword8
someword9
someword1

file2包含:

someword2
someword3
someword4
someword5
someword7
someword11
someword1

所以我不想只拥有file1中哪些文件不包含的行。我怎么能用bash做到这一点?

答案是:

grep -v -x -f file2 file1

    -v for select non-matching lines
    -x for matching whole lines only
    -f f2 to get patterns from f2.

3 个答案:

答案 0 :(得分:1)

您可以使用grep -vf

grep -vwFf file2 file1
someword0
someword6
someword8
someword9

检查man grep以获取此处使用的所有grep选项的详细信息。

答案 1 :(得分:1)

您也可以使用comm命令:

comm -23 file1 file2

说明:

comm比较两个文件,并在3列中打印出file1,file2和两者中唯一的行。

使用选项-2和-3(或简称-23)会禁止打印这些列,因此您只需获得file1的唯一行。

答案 2 :(得分:0)

如果您的行是唯一的,请执行左连接并过滤掉两个表中存在的行。

join <(sort file1) <(sort file2) -o0,2.1 -a1 | awk '!$2'