Linux의 Fasta 파일에서 열 추출

Linux의 Fasta 파일에서 열 추출

아래와 같이 fasta 파일이 있습니다.

>ENST00000632684.1 cdna chromosome:GRCh38:7:142786213:142786224:1 gene:ENSG00000282431.1 gene_biotype:TR_D_gene transcript_biotype:TR_D_gene gene_symbol:TRBD1 description:T cell receptor beta diversity 1 [Source:HGNC Symbol;Acc:HGNC:12158]
GGGACAGGGGGC
>ENST00000434970.2 cdna chromosome:GRCh38:14:22439007:22439015:1 gene:ENSG00000237235.2 gene_biotype:TR_D_gene transcript_biotype:TR_D_gene gene_symbol:TRDD2 description:T cell receptor delta diversity 2 [Source:HGNC Symbol;Acc:HGNC:12255]
CCTTCCTAC

gene_symbol과 설명을 추출하고 싶습니다. 하지만 안타깝게도 설명 사이에 공백이 있어 전체 설명을 추출할 수 없습니다.

나는 이것을 시도했다

cat Homo_sapiens.GRCh38.cdna.all.fa | grep ">" | cut -f 7,8 -d" "  > Human_Annotations

그러나 이로 인해 설명이 손상된 출력이 제공됩니다.

gene_symbol:TRBD1 description:T
gene_symbol:TRDD2 description:T

나는 이런 출력을 원한다

TRBD1 T cell receptor beta diversity 1
TRDD2 T cell receptor delta diversity 2

답변1

사용 awk:

awk -F ':' '/^>/ { sub(" .*",    "", $10)
                   sub(" \\[.*", "", $11)
                   print $10, $11 }' file.fa

추출하려는 데이터는 [각 헤더 행의 10번째 필드에 있는 첫 번째 단어와 11번째 필드까지의 모든 것입니다(필드가 :구분된 경우).

이 코드는 10번째 필드의 첫 번째 공백과 [11번째 필드 이후의 모든 내용( [이전 공백 포함)을 제거합니다.

그런 다음 수정된 필드 10과 11을 인쇄합니다.

질문의 데이터 출력을 제공합니다.

TRBD1 T cell receptor beta diversity 1
TRDD2 T cell receptor delta diversity 2

답변2

다음과 같이 시도해 보세요.

cat ... | sed -n '/^>/ { s/.*description: *//; s/\[.*//; p; }'

(모바일기기라 테스트는 안해봤습니다.)

더 우아한 방법이 있습니다. 예를 들어 Awk 루프가 가장 유연합니다.

관련 정보