Linux
在 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
嘗試這樣的事情:
cat ... | sed -n '/^>/ { s/.*description: *//; s/\[.*//; p; }'
(未經測試,因為我在手機上。)
還有更優雅的方式;例如,Awk 循環將是最靈活的。
使用
awk
:awk -F ':' '/^>/ { sub(" .*", "", $10) sub(" \\[.*", "", $11) print $10, $11 }' file.fa
您要提取的數據是第 10 個欄位中的第一個單詞以及
[
每個標題行的第 11 個欄位中的所有內容(如果欄位是 -:
分隔的)。程式碼從第 10 個欄位的第一個空格以及第
[
11 個欄位中的所有內容(包括 the[
和前面的空格)中刪除所有內容。然後列印修改後的第 10 和第 11 欄位。
給出問題中數據的輸出:
TRBD1 T cell receptor beta diversity 1 TRDD2 T cell receptor delta diversity 2