删除多个文本文件中的重复行(循环)

时间:2018-11-30 20:42:11

标签: linux awk sed grep cygwin

我有一个包含多个文本文件的大目录,每个文本文件包含多行。我正在尝试创建一个循环,以针对每个文本文件检查每个文本文件并删除重复的值。

例如,假设我有3个文本文件。

File1.txt

1
2
3
4

File2.txt

3
4
5
6

File3.txt

6
7
8

首先,我要针对File2.txt检查 File1.txt ,并从File2.txt中删除重复的值。

接下来,将 File1.txt 与File3.txt

,然后将 File2.txt 与File1.txt

File2.txt 和File3.txt

...等

我正在使用grep -vf File1.txt File2.txt > File2.txt来删除文件中的重复值,但是我不确定如何将其放入循环中。

我尝试了以下操作,但是没有用。

for f in *.txt; do
for f2 in *.txt; do
grep -vf $f $f2 > $f.txt;
done

谢谢。

1 个答案:

答案 0 :(得分:1)

您的方法有些混乱。我认为这就是您所需要的:

假设每个文件中的唯一条目,因此每个文件可以代表一个集合,

A \ B定义集合差异(从A中删除公共元素)。然后,只需

file1.new = file1
file2.new = file2 \ file1
file3.new = (file3 \ file1) \ file2

无需循环回去再执行file1和file2。

转换为代码:

$ function diff() { grep -vFf "$2" "$1"; }
$ cp file1 file1.new
$ diff file2 file1 > file2.new
$ diff <(diff file3 file1) file2 > file3.new

$ head file?.new

==> file1.new <==
1
2
3
4

==> file2.new <==
5
6

==> file3.new <==
7
8
相关问题