【问题标题】:BASH: comm (or similar) when compare multiple filesBASH:比较多个文件时的通讯(或类似)
【发布时间】:2013-03-21 10:26:06
【问题描述】:

我有以下问题:我想比较包含这样一个列表的 8 个文件的内容

Sample1.txt    Sample2.txt     Sample3.txt
apple          pineapple       apple
pineapple      apple           pineapple
bananas        bananas         bananas
orange         orange          mango
grape          nuts            nuts

使用comm Sample1.txt Sample 2.txt我可以拥有这样的东西

grape    nuts    apple
                 pineapple
                 bananas
                 orange

意思是在第一列我有一些只与第一个样本相关的东西,第二列是只与第二个样本相关的东西,第三列是共同的东西。

我也想做同样的事情,但需要 8 个文件(示例)。使用差异是不可能的,但最后我想拥有

Sample1  Sample2   Sample3    ...Sample8     Things in common
grape    nuts      mango                     apple
                                             pineapple
                                             bananas

有没有机会用 bash 来做呢?是否有类似 diff 的命令允许搜索两个以上文件的差异?

谢谢大家...我知道这是一个具有挑战性的问题

法比奥

【问题讨论】:

  • 你也许可以用 comm 和一些 bash 脚本来编程:将文件 X 与所有其他文件的连接进行比较,产生“仅在文件 X 中”,然后连接所有这些“仅在文件 X 中” " 文件并将其与所有文件的串联进行比较,从而产生“公共”部分。不过,对于大量文件,它可能效率不高。
  • 你是怎么解决这个问题的?

标签: diff comm


【解决方案1】:

这是我幼稚的解决方案:

first=sample1.txt; for a in *.txt; do comm -12 $first $a >temp_$a; echo "comparing" $first " " $a "and writing to temp_$a"; first=temp_$a; cat temp_$a; done;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 2019-06-16
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多