以下のように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ループが最も柔軟です。