【问题标题】:Unix merging directories and sorting out duplicate file lines?Unix合并目录并整理出重复的文件行?
【发布时间】:2016-03-01 04:32:41
【问题描述】:

我是 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 

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

【问题讨论】:

    标签: bash sorting unix merge duplicates


    【解决方案1】:
    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
    

    【讨论】:

    • 我在您的示例中更改了目录名称以匹配现有目录,我收到一条错误消息,指出没有现有目录。我正在使用 cygwin,这些目录位于我的 c:\cgywin 目录中,该目录应该是根目录。也没有错别字
    • 所有三个涉及的目录都必须存在。您可以mkdir -p A 确保A 目录存在。
    • 谢谢,该实用程序使用了不同的根目录。
    猜你喜欢
    • 2013-09-12
    • 2011-07-16
    • 2016-11-17
    • 2015-02-25
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多