Unix合并目录并整理出重复的文件行?

时间:2015-11-27 02:28:34

标签: bash sorting unix merge duplicates

我是Unix和Bash的新手,可以使用一些命令来帮助将一些相同的目录与数百个文本文件合并。目录中的所有文件名都相同,但不是每个文本文件中的所有行。

目标是合并目录,使用合并内容获得每个单独文件的一个更新副本,并删除重复的行。

这是目录和预期输出的一个非常基本的例子:

Directory A-1
   1.txt
   2.txt
   3.txt

Directory A-2
   1.txt
   2.txt
   3.txt

End Result - Directory A
   1.txt
   2.txt
   3.txt

这是我正在使用的命令行产生语法错误:

for each $file in A-1, cat A-1/$file A-2/$file |sort|uniq > A/$file 

如果有人能够提供合适的命令语法来合并目录并从每个单独的文件中删除所有重复的行,我们将不胜感激。

1 个答案:

答案 0 :(得分:2)

for f in A-1/*; do 
   bn="$(basename "$f")"
   sort -u "$f" "A-2/$bn" > "A/$bn"
done

这假设对于A-1中的每个文件,A-2中的相应文件具有相同的名称。它合并两个相应文件的内容,对它们进行排序,删除重复项,并将输出保存在必须存在的A /中。

例如,假设您从这开始:

mkdir -p A-1 A-2 A
(
echo a 
echo b 
echo c 
) > A-1/a
(
echo b 
echo c 
echo d
) > A-2/a

运行上面的for循环将为您提供A/a

a
b
c
d