我有一个包含多个文本文件的大目录,每个文本文件包含多行。我正在尝试创建一个循环,以针对每个文本文件检查每个文本文件并删除重复的值。
例如,假设我有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
谢谢。
答案 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