【发布时间】:2016-03-05 12:26:40
【问题描述】:
我正在使用这个命令来合并多个相同的目录并从每个相应的文件中删除重复的行:
for f in app1/*; do
bn="$(basename "$f")"
sort -u "$f" "app2/$bn" > "app/$bn"
done
有没有办法编辑它,以便检查所有文件的行并删除所有重复项?我确实需要将现有文件结构与单个文件一起保留。
最终结果会创建一个包含 300 个不超过 30mb 的文本文件的目录。
示例:
**Directory app1**
*1.txt*
a
b
c
*2.txt*
d
e
f
**Directory app2**
*1.txt*
a
b
c
g
*2.txt*
a
b
c
d
e
f
**Results in Directory app**
*1.txt*
a
b
c
g
*2.txt*
a
b
c
d
e
f
Desired Result in Directory app Should Be:
*1.txt*
a
b
c
g
*2.txt*
d
e
f
正如您所见,当 2.txt 中也有重复的“A B C”行时,它并没有删除它。每个文件中的所有行都应保持唯一,并且应删除所有重复项。
【问题讨论】:
-
@MarcB - 这就是
sort -u所做的,不是吗? -
啊,是的。 ... 从来没有使用 sort 来做唯一性。习惯的力量 - 总是使用 uniq
-
nickyb,我不确定您现有的脚本如何无法实现您的目标。
sort -u file1 file2 file3应该合并三个文件,对它们进行排序并将结果唯一化。你能澄清为什么这不是你想要的吗? “检查所有文件的行”是什么意思?你是说你想从当前循环实例之外的文件中获取 uniq 行吗?还是别的什么? -
我还是新手,但上面的脚本合并了相同的目录,我相信它只会删除相同文件中的重复项。它会从 a.txt 和 a.txt 中删除相同的文件,但不会从 a.txt 和 b.txt 中删除。我可能需要一个完整的单独命令来从整个目录中删除重复项,但我需要以保留现有文件名的方式执行此操作。
-
删除相同的文件?还是相同的线?您是否要比较相同的文件或文件内容?据我所知,
sort -u file1 file2 file3在功能上等同于cat file1 file2 file3 | sort | uniq。您能否更新您的问题以显示示例输入数据以及您想要的结果?
标签: bash sorting unix directory duplicates