首页 > 解决方案 > 有没有办法一次比较 N 个文件,并且只保留每个文件唯一的行?

问题描述

背景

我有五个文件,我试图使它们彼此唯一。换句话说,我想让每个文件中的文本行彼此没有共性。

尝试的解决方案

到目前为止,我已经能够运行 grep -vf 命令将一个文件与其他 4 个文件进行比较,如下所示:

grep -vf file2.txt file1.txt

grep -vf file3.txt file1.txt

...

这使它打印出 file1 中不在 file2 和 file3 中的行,等等。但是,这变得很麻烦,因为我需要为所有文件的超集执行此操作。换句话说,要真正将每个文件缩减为仅在该文件中的文本行,我必须将文件的每个组合都放入 grep -vf 命令中。鉴于这对我来说听起来很麻烦,我想知道...

问题

linux中用于查找每个文件中与所有其他文件互斥的文本行的命令/命令系列是什么?

标签: linuxfile

解决方案


你可以这样做:

awk '!a[$0]++ { out=sprintf("%s.out", FILENAME); print > out}' file*

这会将 uniq 中的行file写入file.out. 每一行都将被写入它第一次出现的相关输入文件的输出文件中,并且同一行的后续重复将被抑制。


推荐阅读