Linux-从文件2大数据中的文件1中删除行

时间:2019-02-17 11:38:05

标签: linux

有两个文件:

CanDeactivate<CanDeactivateComponent>

我希望直接在file2中删除file1的行。我希望输出不应该是新文件。它应该直接在文件2中删除。当然可以创建一个临时文件。 我的实际文件二包含了超过300.000行。这就是某些解决方案的原因:

file1:
a
b
c
d

file2:
a
b
f
c
d
e

output file (file2) should be:
f
e

不起作用。

1 个答案:

答案 0 :(得分:1)

comm需要对输入文件进行排序。您可以为此使用进程替换:

#!/bin/bash
comm -13 <(sort file1) <(sort file2) > tmp_file
mv tmp_file > original_file

输出:

e
f

或者,如果您有足够的内存,则可以使用以下awk命令,该命令不需要对输入进行排序:

awk 'NR==FNR{a[$0];next} !($0 in a)' file1 file2

输出(保留的排序顺序):

f
e

请记住,数组a的大小直接取决于file1的大小。

PS:也可以使用grep -vFf file1 file2,并且内存要求与awk解决方案相同。鉴于此,我可能只会使用grep