如何匹配File1中的列以获取其在文件2中对应的fasta序列?

如何匹配File1中的列以获取其在文件2中对应的fasta序列?

请问如何将文件中第一列的所有值与文件 2 中的行文本相匹配,以便我可以复制文件 1 中所有对象 ID 的 fasta 序列?

文件1.csv文件

Object_ID, Length, Assignment
NODE_142_length_92872_cov_11.2497,92872,2005469
NODE_405_length_50717_cov_10.7964,50717,82654
NODE_775_length_33402_cov_18.9306,33402,1147
NODE_1008_length_27630_cov_17.7829,27630,1184

文件2 fasta.file

>NODE_1_length_501653_cov_19.284
TGGTGTGAGAGGCGCACCTCGCTAACTTTTCAGTTAGCGAGGCCGTCTACTCGATTAGCT
GTTATGAGCCCGACGAGCTACCAACTGCTCCATCCCGCGATATTGTGATGCAAAGGTAAG
>NODE_142_length_92872_cov_11.2497
ATTAACTACTAAGTTACAAATTTTAGTAGCTGTCCAGTTTAAAGGAAGTATTTCATATTT
TCGCTTACGTTAAATAGGAAAAGCAAGTTCTTTTTTGAGGTACCCAGTGAGTCTGATTTT

输出文件

>NODE_142_length_92872_cov_11.2497
ATTAACTACTAAGTTACAAATTTTAGTAGCTGTCCAGTTTAAAGGAAGTATTTCATATTT
TCGCTTACGTTAAATAGGAAAAGCAAGTTCTTTTTTGAGGTACCCAGTGAGTCTGATTTT

谢谢

答案1

这可以通过以下方式完成:

for i in `awk -F ',' '{print $1}' file1.csv `; do grep $i fasta.file ; done

在这里,我首先Object_ID使用以下方法从 file1.csv 中提取: awk -F ',' '{print $1}' file1.csv

然后围绕它运行一个循环以从其他文件中提取

答案2

假设调用了 Fasta 文件fasta.fa并且调用了 CSV 文件sequences.csv,并且您有SAM工具(一个相当标准的生物信息学包)已安装。

  1. 索引 Fasta 文件:

    samtools faidx fasta.fa
    
  2. 将您想要提取的名称提取到regions.txt

    awk -F, 'NR > 1 { print $1 }' <sequences.csv >regions.txt
    

    该文件的格式为region:start-stop(每行一个),其中region是序列名称,startstop表示该序列中您想要提取的区域。我假设您想要提取完整的序列,所以我不会将startorstop放在那里。

    如果您想将 CSV 文件中的数字用作startstop

    awk -F, 'NR > 1 { printf("%s:%d-%d\n", $1, $2, $3) }' <sequences.csv >regions.txt
    
  3. 将序列提取到output.fa

    samtools faidx -c fasta.fa -r regions.txt >output.fa
    

regions.txt在 Fasta 文件中找不到的序列名称将作为空序列输出output.fa(并且samtools也会对这些发出警告)。

也可以看看:

相关内容