[英]Extracting information from a file using another file with list of specific text; Ubuntu/ Linux
我有一個包含 ID 列表、索引/標題的文件,我們稱它為 list.txt
TRINITY_DN10002_c0_g1_i1.p1
TRINITY_DN10002_c0_g1_i2.p1
TRINITY_DN10002_c1_g1_i1.p1
TRINITY_DN10006_c0_g1_i1.p1
TRINITY_DN10006_c0_g1_i4.p1
TRINITY_DN10007_c0_g1_i2.p1
TRINITY_DN1000_c0_g1_i15.p1
TRINITY_DN1000_c0_g1_i31.p1
TRINITY_DN1000_c0_g1_i40.p2
TRINITY_DN1000_c0_g2_i1.p1
TRINITY_DN10012_c2_g1_i1.p1
TRINITY_DN10014_c0_g2_i1.p1
TRINITY_DN10014_c2_g1_i1.p1
TRINITY_DN10014_c2_g2_i1.p1
和另一個文件(大),它有我想從中提取的數據/信息(序列),稱之為 datafile.fasta
CAGTCAATAATTTTGACGTACTTTTCAAAACATTTCTTGCTGTTTCTTCAAAACTCTTAT
CTAATTTTTTGTTTTTCAGAAGGTTAAAAGTATATTGAAAAGTTTCTCGATTTTCAGTGG
TTAGTCTAGGATTGCTATTATTTTCAATTTGGTGTTTGCATTCTTCAAACATTACCATCA
GATCATATCGTGTTATTTCATACTGCATTTCTTTGATTTCCTGCTTTGACAAAGTTGTTA
TCGATTTTTTCATCCTGTTTCTTAATTTTGTCAAACCAT
>TRINITY_DN36094_c0_g1_i1 len=250 path=[0:0-249]
AGGAAAGTACTTAGTGAGTACATACCTGACAGTGATCACGGTTTTACGAAAAGATACATT
GAAAGAAGAATACTTCAACCTCCATTAAAACGATACACGTATTGCTTGCTCACTTCCATG
TCTTATGGCGCTTCAGACTGCTATGATCCAAATTTTTGCGGTCCCATCTTTGGTAAACGA
AATTGTTACAAGCGGTCCAAATTTACAGATAATCATTTCCCAGATATAAATCTCGGCGGG
AAACTTCATC
>TRINITY_DN36018_c0_g1_i2 len=1265 path=[0:0-408 1:409-443 2:444-1264]
AAAAGCTCCAATTGTTTGGTGGACTCCCGCTGGCTAGTCAGGATAACAGATTACGGTCTG
CCAAGTTTTAGTAGCGGCCAGTTTTTTGACGAATCAGAACAAGATGCATATAGACGTAAA
CTTTGGACCGCCCCAGAATTATTGAGGGAGAACATACCCCCTAAGAACGGTTCCCAAAAG
GGTGACGTATACAGTTTCGCCATAGTGGCGTACGAGATTATAACAAGGTCTGAACCATTT
CCCTTTGATTTAATGACTGCCAGAGACGCGGTAAATAGGGTAAGAAACGGTGAAAGCATC
CCGTTCAGACCATGCCTACCCGAGACAACGGATGTTGGCAAAGCTGTCCTTGACCTCTTG
CGAGCTTGTTGGCATGAGGTTCCAGAACACAGACCCAACTTCAACCAGGTTCGAACTGTT
[....]
我正在嘗試獲取一個 output,它應該看起來像這樣
GCGTACGAGATTATAACAAGGTCTGAACCATTT
CCCTTTGATTTAATGACTGCCAGAGACGCGGTAA
TRINITY_DN10002_c0_g1_i1.p1
TCCATTAAAACGATACACGTATTGCTTGCTCACTTCCATG
TCTTATGGCGCTTCAGACTGCTA
來說明一些。
我怎樣才能使用列表文件來提取我的序列?
我嘗試grep -Fwf list.txt -A1 datafile.fasta > NRCDS_nuc.fasta
但是當我查看 output 文件時它是空的。
但是嘗試samtools faidx tirnity_out.Trinity.fasta
並手動添加 id 似乎很費力。 任何幫助將不勝感激,謝謝!
這是使用awk的一種方法。 這不會產生您預期的 output(可能在發布時出現問題?),但根據您的描述,我認為以下可能是這里需要的。 這將從列表文件中的行中刪除擴展名(即 .p1、.p2 等)並將它們添加到數組中。 然后對於 FASTA 文件中的每一行 header,如果第一個字段存在於數組中,則三元運算符將標志設置為true ,否則設置為false 。 默認操作是打印,因此僅當標志為true時才打印行。
awk 'FNR==NR { sub(/\.[^\.]*$/,""); a[$0]; next } /^>/ { f=substr($1,2) in a ? 1 :0 }f' list.txt datafile.fasta
看起來目標是根據 FASTA ID 從文件中提取特定的 FASTA 記錄。 無論何時處理 FASTA 記錄,我都強烈建議您使用 BioPython 或 BioPerl 模塊,讓您的生活更輕松。 以下是如何使用 Python 和 Biopython 模塊從您的 FASTA 數據庫文件中提取特定的 FASTA 記錄:
from Bio import SeqIO
import textwrap
my_id_file = open('fasta_id_records.txt','r')
my_fasta_file = open('fasta_database.fasta','r')
my_dictionary = {} # fasta IDs are keys, value can be anything.
for line in my_id_file:
my_dictionary[line[:-1]] = 'value'
#Read fasta file records one-by-one, and print the records whose IDs in fasta_id_records.txt
for seq_record in SeqIO.parse(my_fasta_file, "fasta"):
if seq_record.id in my_dictionary:
sequence = str(seq_record.seq)
fasta_record = textwrap.fill(sequence, width=60) #wrap to 60 character
print(f">{seq_record.id}\n{fasta_record}")
my_fasta_file.close()
my_id_file.close()
這可以寫成更少的行,但是按照我的寫法更容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.