2014-12-29 4 views
0

다음과 같은 형식의 txt 파일이 있습니다. 나는 모든 파일에서 공통적 인 텍스트 줄을 찾고 싶다.두 개 이상의 파일을 비교하는 Bash 명령

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 

이 출력이되어야합니다 :

파일 1 (나는 그 중 204이) 나는 통신과 bash는 두 개의 파일이 작업을 수행 할 수 있습니다 알고 있지만 나는 두 개 이상의 파일을 할 수

File 1: 

chrom  chrStart   chrEnd 

chr1   1    1001 

chr1  12001   13001 
+1

귀하의 예는 내가 알 수있는 'comm'을 올바르게 사용하지 않았습니다. 'comm'은 두개의 * 정렬 된 파일을 비교하는데 사용되지만, 당신의 예제는 적절하게 정렬되지 않습니다 ('chr1'은 ASCII 정렬에서'chrom'보다 먼저옵니다). 응용 프로그램에서 파일이 정렬되어 있습니까? 그리고 귀하의 질문에 명확하게, 모든 파일과 동일하게 모든 라인을 찾는 방법을 찾고 있습니까? – lurker

+0

예 공통점을 알아 내기 위해 모든 파일을 비교하고 싶습니다. 그래서 comm이 적절하다고 생각하지 않기 때문에 나는 그들을 분류하지 않은 것입니다. –

+0

정리해 주셔서 감사합니다. 당신의 문제 진술서는 다음과 같이 말하고 있습니다. * 나는 bash에서'comm' *로 두 개의 파일로 이것을 할 수 있습니다. 그렇다면 질문은 다음과 같이됩니다 : 순서가 중요합니까? 한 파일에'a','b' 행이있을 수 있습니까? 그렇지만 다른 두 행은 같은 순서이지만 다른 순서 ('b'''''''''')를 가질 수 있습니까? – lurker

답변

1

어떻게 당신은 이미 종류 012의 사용을 알고 있다는 생각이 루프?

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

셀프 설명에 대한통신.

AWK 예 :

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

가정 :

  1. 같은 라인은 하나의 파일에 반복되지 않습니다.
  2. 모든 파일의 공통 줄은 동일합니다. 간격/탭 차이가 없습니다.
관련 문제