Bash命令比较两个以上的文件

时间:2014-12-29 14:22:16

标签: bash

我有一大堆txt文件格式如下。我想找出所有文件中常见的文本行。我知道我可以使用bash中的两个文件来实现这一点,但我可以使用两个以上的文件(我有204个文件)

文件1:

chrom         chrStart         chrEnd

chr1             1                         1001

chr1         11001                   12001

chr1          12001                   13001

File 2:

 chrom    chrStart          chrEnd   
    chr1.        1                 1001                      chr1.            9001                 10001
  chr1       12001               13001

输出应为:

File 1:

chrom     chrStart         chrEnd

chr1           1               1001

chr1        12001          13001

1 个答案:

答案 0 :(得分:1)

这个循环怎么样?:

sort < file1 > fileresult
for i in {2..204}; do
    comm -12 fileresult <(sort < file$i) > fileresult.tmp
    mv fileresult.tmp fileresult
done

自我解释,考虑到你已经知道使用sort&amp; COMM。

awk示例:

awk 'FNR==1{i++}
     {a[$0]++}
     END{
         for(x in a){
              if (a[x]==i){print x;}
          }
        }
     ' file{1..204}

假设:

  1. 同一行不会在单个文件中重复。
  2. 所有文件中的公共行是相同的。没有间距/标签差异。