我使用此命令合并多个相同的目录,并从每个相应的文件中删除重复的行:
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
正如您所看到的那样,它并没有删除副本" A B C" 2.txt中的行也是在1.txt中找到的。每个文件中的所有行都应保持唯一,并且应删除所有重复项。
答案 0 :(得分:0)
这可能应该使用perl -i
:
perl -i -n -e 'print unless $h{$_};++$h{$_}' app1/*
这似乎在app1中创建.bak
个文件(尽管手册页说它赢了),您可能希望在使用rm app1/*.bak
验证结果后消除这些文件。
答案 1 :(得分:0)
正如您所看到的那样,它并没有删除重复的“A B C”行 2.txt也可以在1.txt中找到。每个文件中的所有行都应保持唯一,并且应删除所有重复项。
您可以通过将7171u对您的其他问题“Unix Bash Remove Duplicate Lines From Directory Files?”的答案应用于上述命令的结果(在将其脚本中的tmp/*
更改为app/*
之后,实现此目标,这应该是微不足道的)。