我有两个文本文件,我想逐行读取文件 1,在文件 2 中搜索相同的行并将其从文件 2 中删除。
我有以下伪代码:
for line in file1.txt
do
sed search line and delete in file2.txt
done
答案1
您可以使用 grep 来完成此操作。
以下是一个例子:
$ echo localhost > local_hosts
$ grep -v -f local_hosts /etc/hosts
127.0.1.1 ubuntu
# The following lines are desirable for IPv6 capable hosts
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
答案2
一般来说,你想保留file2 中的行数实际上并不在 file1 中。
还有更多的可能性,
comm <(sort file1) <(sort file2) -23
通过加入
join -v 1 <(sort file1) <(sort file2)
或通过大王不需要对文件进行排序:
awk 'NR==FNR{lines[$0];next} !($0 in lines)' file2 file1
答案3
通过更多的互联网搜索,我找到了一种方法来做到这一点。而且只需使用 grep 即可,无需对文件进行排序。
grep -Fvxf file2 file1
这将在屏幕上显示新信息,但这会带来问题,因为我想从文件 1 中删除文件 2 中的内容并创建一个新的文件 1。由于上述代码有效,我只需添加代码即可获得我想要的内容。
grep -Fvxf file2 file1 > tempfile && mv tempfile file1
这解决了我的问题。也许不是最好的方法,但确实有效。