아래와 같이 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 루프가 가장 유연합니다.