2014-03-26 3 views
0

두 파일에서 일부 목록을 일치시키고 추출하려고합니다. 예를 들어 설명해 드리겠습니다.공통 열을 기반으로 서로 다른 두 파일을 일치시키고 병합하십시오.

나는 두 개의 파일

List 
gene1 
gene2 
gene3 

MainFile 
chr17 70593167 70593381 exon . + gene10 
chr17 70593167 70593381 intron . + gene1 
  1. 나는 유전자의 목록과 일치하고 MainFile에서 추출하고자하는

    있습니다. 이 하나의 출력은

    chr17 70593167 70593381 intron . + gene1

  2. 내가뿐만 아니라 일치하지 않는 사람을 찾고 싶은 것이다.

    egrep "$(echo $(<List)|sed 's/ /$|/g')$" MainFile > Matches 
    egrep -v "$(echo $(<List)|sed 's/ /$|/g')$" MainFile > NonMatches 
    

    그것은 SED 및 bash는 대체의 도움으로 정규식으로 목록을 변환 한 다음 검색 egrep을 사용 :이 하나의 출력은

    chr17 70593167 70593381 exon . + gene10

+0

체크 아웃'join' 프로그램 ... – twalberg

+0

작업에 참여합니까? – user1007742

+0

해야합니다. 적어도 내가 가지고있는 버전은 - 그러나 거기에 다른 구현이있을 수 있으므로, 당신을 체크 아웃하십시오. 참고, 비록 두 입력 파일 조인 키에 정렬해야합니다 ... – twalberg

답변

0

이런 식으로 뭔가를 시도 할 것이다 MainFile을 통해.

List가 큰 파일 일 경우 제대로 작동하지 않을 수 있습니다.

+0

감사하지만, 조금 느린 데이터가 내가 가진대로 – user1007742

0

이 루비 솔루션 내 쉘 버전보다 더 빨리해야한다 : 일치하는 항목이 여러 개있을 경우

#!/usr/bin/ruby 

list = File.read("List").split 
File.open("Matches","w"){|match| 
    File.open("NonMatches","w"){|non| 
    File.open("MainFile").each{|line| 
     if list.include?(line.split[6]) 
     match.print(line) 
     else 
     non.print(line) 
     end 
    } 
    } 
} 
관련 문제