美文网首页
Perl语言---批量将fastq格式转换为fasta格式

Perl语言---批量将fastq格式转换为fasta格式

作者: 食品猪的生信鸡 | 来源:发表于2023-11-09 20:14 被阅读0次

首先介绍fastq的格式和fasta的格式:

fastq是测序所得的文件,其内部含有对每一个碱基进行质量评估的值:


F_NC_1_1.clean.fq

第一行:测序的index;
第二行:该index下测出的序列信息;
第三行:+;
第四行:对第二行每个碱基进行一个质量评估,一个碱基对应一个字母;
fasta是默认序列的存储的文件:


GCF_000001635.27_GRCm39_rna.fna
示例文件为小鼠参考基因组对应的转录组文件。
包括两部分内容:

第一部分:基因的index
第二部分:基因的序列

其次,在转化前,我们需要比较两个文件格式的异同,涉及转换思路:

1、将fastq文件中index中的@转化为>;
2、将fastq文件中的第三行和第四行删除;

接着我们开始转化,秉着处理数据的大小越来越小的原则

我们首先进行2(将fastq文件中的第三行和第四行删除),利用的是perl语言中正则表达式的思路,查找和复写:
#! C:\other_disk\D_disk_software\perl64 -w
use utf8;
binmode(STDOUT,":utf8");
open(FH, "<F_NC_1_1.clean.fq") or die "file cannot open, $!";
open(FH2, ">F_NC_1_1_shit.txt") or die "file cannot open, $!";
while(<FH>){
    if(/@/ or /A/ or /T/ or /C/ or /G/){
        print FH2 $_;
    }else{
        next;
    }
}
close FH;
close FH2;

执行完以上代码,我们将目标数据转化为:


F_NC_1_1_shit.txt
我们接着进行1(将fastq文件中index中的@转化为>),利用的是perl语言中正则表达式的思路,查找和替换:
#! C:\other_disk\D_disk_software\perl64 -w
use utf8;
binmode(STDOUT,":utf8");
open(FH2, "<F_NC_1_1_shit.txt") or die "file cannot open, $!";
open(FH3, ">F_NC_1_1_replace.txt") or die "file cannot open, $!";
while(<FH2>){
    if(s/@/>/g){
        print FH3 $_;
    }else{
        print FH3 $_;
    }
}
close FH2;
close FH3;

执行完以上代码,我们将目标数据转化为:


F_NC_1_1_replace.txt

那我们能否将以上代码合并,一步就完成格式的转化呢?

当然可以,上代码:

#! C:\other_disk\D_disk_software\perl64 -w
use utf8;
binmode(STDOUT,":utf8");
open (FH1, "<F_NC_1_1_shit.txt") or die "file cannot open, $!";
open (FH2, ">F_NC_1_1_replace.txt") or die "file cannot open, $!";
while(<FH1>){
    if(/@/ or /A/ or /T/ or /C/ or /G/){
        if(s/@/>/g){
            print FH2 $_;
        }else{
            print FH2 $_;
        }
    }else{
        next;
    }
}
close FH1;
close FH2;

假如我们有多个文件需要格式转化,那该如何进行处理呢?

因为这个文件的转化是为了进行后续的blast,因此,我将数据上传到了超算中,进行批量的转化。因此,perl语言的脚本的第一行进行了调整、文件的绝对路径也进行了指定。同时也加入了新的代码。

#!/public1/home/scb4951/miniconda3/bin/perl -w
use utf8;
binmode(STDOUT,":utf8");
while (my $file = glob "/public1/home/scb4951/data/Guizhen_oocyte_rna/all_clean/*.clean.fq" ){#将以上路径下的所有包含.clean.fq的文件名称依次传入到$file变量中。
    print "$file\n";#可以删除,这个命令是为了验证该文件夹下是否有符合要求的文件。
    my $file1 = $file.".sift";#命名转化之后的文件名,在原文件名后加入.sift
    open (FH1, '<:utf8', $file) or die "file cannot open, $!";#将变量$file转化为输入文件的文件名。
    open (FH2, '>:utf8', $file1) or die "file cannot open, $!";#将变量$file1转化为输出文件的文件名。
    while(<FH1>){
        if(/@/ or /A/ or /T/ or /C/ or /G/){
            if(s/@/>/g){
                print FH2 $_;
            }else{
                print FH2 $_;
            }
        }else{
            next;
        }
    }
    print $file."OK";
    close FH1;
    close FH2;
}

相关文章

网友评论

      本文标题:Perl语言---批量将fastq格式转换为fasta格式

      本文链接:https://www.haomeiwen.com/subject/mbmcwdtx.html