我有一些' fastq'格式化DNA序列文件(基本上只是文本文件),如下所示:
@Sample_1
ACTGACTGACTGACTGACTGACTGACTG
ACTGACTGACTGACTGACTGACTGACTG
+
BBBBBBBBBBBBEEEEEEEEEEEEEEEE
EHHHHKKKKKKKKKKKKKKNQQTTTTTT
@
+
@
+
@Sample_4
ACTGACTGACTGACTGACTGACTGACTG
ACTGACTGACTGACTGACTGACTGACTG
+
BBBBBBBBBBBBEEEEEEEEEEEEEEEE
EHHHHKKKKKKKKKKKKKKNQQTTTTTT
我的最终目标是将这些变成“快速”。格式文件,但要做到这一点,我需要摆脱中间的两个空序列。
修改
所需的输出如下所示:
@Sample_1
ACTGACTGACTGACTGACTGACTGACTG
ACTGACTGACTGACTGACTGACTGACTG
+
BBBBBBBBBBBBEEEEEEEEEEEEEEEE
EHHHHKKKKKKKKKKKKKKNQQTTTTTT
@Sample_4
ACTGACTGACTGACTGACTGACTGACTG
ACTGACTGACTGACTGACTGACTGACTG
+
BBBBBBBBBBBBEEEEEEEEEEEEEEEE
EHHHHKKKKKKKKKKKKKKNQQTTTTTT
我尝试的所有专用软件(Biopython,独立程序,其他人发布的perl脚本)都在空序列中崩溃。这实际上只是搜索字符串@\n+
并将其替换为空的问题。我用Google搜索并阅读了几篇帖子,并尝试了大约一百万个选项,并且无法弄明白。以下是一些不起作用的事情:
sed s/'@'/,/'+'// test.fastq > test.fasta
sed s/'@,+'// test.fastq > test.fasta
任何见解都将不胜感激。
PS。我有一台Mac。
答案 0 :(得分:2)
尝试:
sed "/^[@+]*$/d" test.fastq > test.fasta
/d
option告诉sed
"删除"匹配线(即不打印)。
^
和$
表示"字符串的开头" "字符串结束"分别,即该行必须完全匹配。
所以,上面的命令基本上说:
打印所有不的行只包含
@
或+
,并将结果写入test.fasta
。
编辑:我稍微误解了这个问题,对不起。如果你想只删除一对连续的行,比如
@
+
然后您需要执行多行搜索并替换。
虽然这个可以完成sed
,但它可能更容易使用类似perl
脚本的内容:
perl -0pe 's/^@\n\+\n//gm' test.fastq > test.fasta
-0
选项将Perl变为"文件slurp"模式,其中Perl一次性读取整个输入文件(而不是逐行)。这样可以进行多行搜索和替换。-pe
选项允许您运行Perl代码(在这种情况下进行模式匹配和替换)并显示命令行的输出。^@\n\+\n
是要匹配的模式,我们无需替换(即删除)。/gm
使替换成为多线和全局。您也可以将-i
作为第一个参数传递给perl
,以便内联编辑文件。
答案 1 :(得分:0)
这可能不是世界上最优雅的解决方案,但您可以使用tr将\n
替换为null
字符并返回。
cat test.fastq | tr '\n' '\0' | sed 's/@\x0+\x0//g' | tr '\0' '\n' > test.fasta
答案 2 :(得分:0)
试试这个:
sed '/^@$/{N;/\n+$/d}' file
找到@
后,下一行将N
附加到模式空间。
如果在下一行中找到$
,d
命令将删除这两行。