比较两个文件的结果,获取第二个文件的唯一行

比较两个文件的结果,获取第二个文件的唯一行

我有两个文本文件,我想逐行读取文件 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

这解决了我的问题。也许不是最好的方法,但确实有效。

相关内容