gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:41:38 25 4
gpt4 key购买 nike

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

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

文件1.txt

1
2
3
4

文件2.txt

3
4
5
6

文件3.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

谢谢。

最佳答案

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

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

let A\B 定义集合差异(从 A 中删除公共(public)元素)。然后,简单地

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

关于linux - 删除多个文本文件中的重复行(循环),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53564639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com