有两个文件:
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
不起作用。
答案 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
。