在Linux中替换FastaQ文件中的特定核苷酸

时间:2017-02-17 17:37:15

标签: linux string awk bioinformatics

我需要分析一些fastaq个文件。主要问题是我目前使用的分析工具只接受ACTG作为核苷酸,而不是IUPAC代码中的其他命名法(RW等)。

我已经制作了这段代码来改变特定的核苷酸:

awk '{
    split($2,a,"") ; 
    str="" ; 
    for (n in a) {nucleotide=a[n]} ; 
    if (nucleotide~/[ACTG]/) {str=str""nucleotide} 
    else {
        if (nucleotide~/[RWMV]/) {str=str""A} 
        else {
            if (nucleotide~/[YD]/) {str=str""C} 
            else {
                if (nucleotide~/[SKN]/) {str=str""G} 
                else {str=str""T}
            }
        }
    }
}' | head

它正在工作但它超级慢。你知道更有效的方法吗?

非常感谢你!

1 个答案:

答案 0 :(得分:3)

为此,假设您使用fastq格式,我建议使用专门的库,biopythonbioperl是不错的选择。

  

cat example.fastq

@ID
AGTCGTACTGGACTGYGCSAACTG
+
IIIIIIIIIIIIIIIIIIIIIIII
@ID2
RWMVYDSKNAAAAAAAAAAAAAAA
+
IIIIIIIIIIIIIIIIIIIIIIII

但是,使用awk

的解决方案
awk 'NR%4==2{gsub(/[RWMV]/,"A"); gsub(/[YD]/,"C"); gsub(/[SKN]/,"G")}1' example.fastq

你明白了,

@ID
AGTCGTACTGGACTGCGCGAACTG
+
IIIIIIIIIIIIIIIIIIIIIIII
@ID2
AAAACCGGGAAAAAAAAAAAAAAA
+
IIIIIIIIIIIIIIIIIIIIIIII