Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash目录排序问题-删除重复行?_Bash_Sorting_Unix_Directory_Duplicates - Fatal编程技术网

Bash目录排序问题-删除重复行?

Bash目录排序问题-删除重复行?,bash,sorting,unix,directory,duplicates,Bash,Sorting,Unix,Directory,Duplicates,我使用此命令合并多个相同的目录,并从每个相应的文件中删除重复的行: for f in app1/*; do bn="$(basename "$f")" sort -u "$f" "app2/$bn" > "app/$bn" done 有没有办法编辑它,这样它就可以检查所有文件的行并删除所有重复的行?我确实需要将现有的文件结构保留为单个文件 最终结果是创建一个包含300个不超过30mb的文本文件的目录 示例: **Directory app1** *1.txt*

我使用此命令合并多个相同的目录,并从每个相应的文件中删除重复的行:

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中删除重复的“abc”行,而在1.txt中也可以找到它。每个文件中的所有行都应该保持唯一,并且应该删除所有重复的行。

这可能应该通过
perl-i
完成:

perl -i -n -e 'print unless $h{$_};++$h{$_}' app1/*
这似乎会在app1中创建
.bak
文件(尽管手册页上说不会),在使用
rm app1/*.bak验证结果后,您可能希望删除这些文件

正如您所看到的,它并没有从中删除重复的“abc”行 在1.txt中也可以找到2.txt。每个文件中的所有行都应保持唯一,并且应删除所有重复的行


您可以通过将7171u对您的另一个问题“”的回答应用于上述命令的结果来实现这一目标(将其脚本中的
tmp/*
更改为
app/*
,这应该很简单)

@MarcB-sort-u就是这么做的,不是吗?啊,是的。。。从来没有用过排序来进行排序。习惯的力量-总是使用uniqnickyb,我不确定你现有的脚本如何无法实现你的目标
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
。您是否可以更新您的问题,以显示示例输入数据以及所需的结果?