有两个文件:
file1:
a
b
c
d
file2:
a
b
f
c
d
e
output file (file2) should be:
f
e
我希望file1中的行应该直接在file2中删除。我希望输出不应该是一个新文件。应该直接删除文件2中的。当然也可以创建一个临时文件。 我的真实文件二包含超过 300.000 行。这就是一些解决方案的原因:
comm -13 file1 file2
不起作用。
请您参考如下方法:
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
。