2013-11-15 2 views
1

I는 각 행의 열이 상이한 수있는 다중 열 GTF 파일 가지고추출 컬럼

chr1 Cufflinks exon 12659 12721 . + . gene_id "XLOC_000001"; transcript_id "TCONS_00000001"; exon_number "1"; oId "CUFF.3.1"; class_code "u"; tss_id "TSS1"; 
chr1 Cufflinks exon 13221 16604 . + . gene_id "XLOC_000001"; transcript_id "TCONS_00000001"; exon_number "2"; oId "CUFF.3.1"; class_code "u"; tss_id "TSS1"; 
chr1 Cufflinks exon 29554 30039 . + . gene_id "XLOC_000002"; transcript_id "TCONS_00000002"; exon_number "1"; gene_name "MIR1302-11"; oId "ENST00000473358"; nearest_ref "ENST00000473358"; class_code "="; tss_id "TSS2"; 
chr1 Cufflinks exon 30564 30667 . + . gene_id "XLOC_000002"; transcript_id "TCONS_00000002"; exon_number "2"; gene_name "MIR1302-11"; oId "ENST00000473358"; nearest_ref "ENST00000473358"; class_code "="; tss_id "TSS2"; 
chr1 Cufflinks exon 69091 70008 . + . gene_id "XLOC_000003"; transcript_id "TCONS_00000005"; exon_number "1"; gene_name "OR4F5"; oId "ENST00000335137"; nearest_ref "ENST00000335137"; class_code "="; tss_id "TSS4"; p_id "P1"; 

내가 열만 'gene_id 패턴에 일치 할를 "..." ; ' 'transcript_id "...";' 'class_code'.. "; '

나는 사용하여 불필요한 열을 제거하는 노력 :

sed -e 's/nearest_ref\s\"[A-Z]\{4\}[0-9]\{11\}\"\;//' -e 's/oId\s\"[A-Z|\.|0-9]*\"\;//' -e 's/gene_name\s\"[A-Z|0-9|\.|\-]*\"\;//' -e 's/contained_in\s\"[A-Z|\_|0-9]*\"\;//' -e 's/p_id*\s\".*\"\;//' merged.gtf > temp.gtf 

하지만 볼 수없는 파일에 많은 기타 원치 않는 열 (파일이 크다)가있는 것 같습니다. 원하는 열을 어떻게 추출하여 다른 파일에 저장합니까?

+0

항상'gene_id 필드 "..."인가;' , 'transcript_id "..."; and class_code "...";'? –

+0

[tag : r]이 (가) 태그 된 이유가 있습니까? – Thomas

+0

필드는 gene_id 다음에 공백이오고 뒤에 큰 따옴표와 그 뒤에 임의의 수의 알파벳 숫자 문자가오고 그 뒤에 다른 큰 따옴표와 세미콜론이옵니다. –

답변

3

위의 여분의 후행 공간, 내 댓글에 내 가정을 생각하지 않는 경우 해당, 다음 작동합니다 :

awk '{ 
    for (i = 1; i <= NF; i++) { 
     if ($i ~ /gene_id|transcript_id|class_code/) { 
      printf "%s %s ", $i, $(i + 1) 
     } 
    } 
    print "" 
}' merged.gtf > temp.gtf 
+0

고마워! 이것은 일했다! –