删除和添加文件中特定位置的序列信息

删除和添加文件中特定位置的序列信息

我必须从 fastq 文件中检索已知长度的特定信息并将其添加到另一个位置。
例如,给出以下 fastq 文件作为输入:

@SRR5394526.1 1 length=150  
CGATGTTAAATCAACGATAACTACACCG    
+SRR5394526.1 1 length=150  
AA<AFJFJJJJJJJJJJAJJJJJJJJJF    

我想要作为输出:

@SRR5394526.1.CGATGT 1 length=150    
TAAATCAACGATAACTACACCG    
+SRR5394526.1.CGATGT 1 length=150    
FJJJJJJJJJJAJJJJJJJJJF  

您可以注意到,前 6 个核苷酸既从第二行的序列中删除,也从第四行的序列中删除,并附加在第一行和第三行的第一个数字 1 之后。我的文件中有数百万个这种大小的块(4 行),这只是一个示例。

我已经找到了如何在文件中添加/附加信息:sed 's/myinfo/&,/4'以及如何删除文件中的信息sed -e '423s!//!!; 424s!printf!//&!' ,但这还不够。任何想法都非常感激。

答案1

使用awk

awk '(FNR-1) % 2 == 0 { name=$1; chr=$2; len=$3; next }
     (FNR-2) % 4 == 0 { seq=substr($0,1,6) }
                      { print name "." seq, chr, len
                        print substr($0,7) }' file.fastq >newfile.fastq

awk程序分为三个块。

  1. 第一个块从第一行开始,每隔两行(序列和质量数据标题行)触发一次。它将该行的三位信息保存到三个变量中。然后它立即跳到下一行输入。

  2. 第二个块将序列行中的前 6 个字符提取到 中seq,但仅适用于从第 2 行开始的第四行(仅限序列行)。

  3. 最后一个块仅在第一个块未处理的行(每个序列或质量数据行)上运行并构造输出。

gzip要在压缩文件上使用它(或bgzip-压缩文件,常用于生物信息学项目),使用

zcat file.fastq.gz | awk '...' | bgzip -c >newfile.gz

要使用变量作为用于切割的值,请考虑

awk -v n=6 '(FNR-1) % 2 == 0 { name=$1; chr=$2; len=$3; next }
            (FNR-2) % 4 == 0 { seq=substr($0,1,n) }
                             { print name "." seq, chr, len
                               print substr($0,n+1) }'

其中-v n=6控制切割的长度。

您还可以将实际awk代码(单引号内的所有内容)放入其自己的脚本文件中,并将其用作

awk -v n=6 -f script.awk file.fastq

答案2

fastq 文件中的数据,在 4 x 4 行上使用 gnu sed,

$ sed -nE ' N;N;N;s/(.+\.1)(\s.+\n)(.{6})(\w+)\s*(\n.+\.1)(.+\n).{6}(\w+)/\1.\3\2\4\5.\3\6\7/p' fastq

@SRR5394526.1.CGATGT 1 length=150
TAAATCAACGATAACTACACCG
+SRR5394526.1.CGATGT 1 length=150
FJJJJJJJJJJAJJJJJJJJJF

相关内容