Regex 跨行查找字符串并替换为空
我有一些“fastq”格式的DNA序列文件(基本上只是文本文件),如下所示:Regex 跨行查找字符串并替换为空,regex,macos,sed,Regex,Macos,Sed,我有一些“fastq”格式的DNA序列文件(基本上只是文本文件),如下所示: @Sample_1 ACTGACTGACTGACTGACTGACTGACTG ACTGACTGACTGACTGACTGACTGACTG + BBBBBBBBBBBBEEEEEEEEEEEEEEEE EHHHHKKKKKKKKKKKKKKNQQTTTTTT @ + @ + @Sample_4 ACTGACTGACTGACTGACTGACTGACTG ACTGACTGACTGACTGACTGACTGACTG + BBBBB
@Sample_1
ACTGACTGACTGACTGACTGACTGACTG
ACTGACTGACTGACTGACTGACTGACTG
+
BBBBBBBBBBBBEEEEEEEEEEEEEEEE
EHHHHKKKKKKKKKKKKKKNQQTTTTTT
@
+
@
+
@Sample_4
ACTGACTGACTGACTGACTGACTGACTG
ACTGACTGACTGACTGACTGACTGACTG
+
BBBBBBBBBBBBEEEEEEEEEEEEEEEE
EHHHHKKKKKKKKKKKKKKNQQTTTTTT
我的最终目标是将这些文件转换成“FASTA”格式文件,但要做到这一点,我需要清除中间的两个空序列。
编辑
所需的输出如下所示:
@Sample_1
ACTGACTGACTGACTGACTGACTGACTG
ACTGACTGACTGACTGACTGACTGACTG
+
BBBBBBBBBBBBEEEEEEEEEEEEEEEE
EHHHHKKKKKKKKKKKKKKNQQTTTTTT
@Sample_4
ACTGACTGACTGACTGACTGACTGACTG
ACTGACTGACTGACTGACTGACTGACTG
+
BBBBBBBBBBBBEEEEEEEEEEEEEEEE
EHHHHKKKKKKKKKKKKKKNQQTTTTTT
我试过的所有专用软件(Biopython、独立程序、其他人发布的perl脚本)都在空序列中崩溃。这实际上只是搜索字符串@\n+
并将其替换为空的问题。我在谷歌上搜索了这篇文章,读了好几篇文章,用sed尝试了大约一百万个选项,但都没能找到答案。以下是一些不起作用的东西:
sed s/'@'/,/'+'// test.fastq > test.fasta
sed s/'@,+'// test.fastq > test.fasta
如有任何见解,将不胜感激
另外,我有一台Mac电脑。试试:
sed "/^[@+]*$/d" test.fastq > test.fasta
指示sed删除匹配行(即不打印)
^
和$
分别表示“字符串开始”和“字符串结束”,即行必须完全匹配
因此,上面的命令基本上说:
打印不包含@
或+
的所有行,并将结果写入test.fasta
编辑:对不起,我稍微误解了这个问题。如果只想删除连续行对,如
@
+
然后需要执行多行搜索和替换
虽然这可以通过sed
完成,但使用perl
脚本可能更容易:
perl -0pe 's/^@\n\+\n//gm' test.fastq > test.fasta
选项将Perl转换为“文件slurp”模式,在此模式下,Perl一次读取整个输入文件(而不是逐行读取)。这将启用多行搜索和替换-0
选项允许您运行Perl代码(本例中为模式匹配和替换)并显示命令行的输出-pe
是要匹配的模式,我们将用零替换它(即删除)^@\n\+\n
使替换成为多行和全局的/gm
您也可以将
-i
作为第一个参数传递给perl
,以内联编辑文件。这可能不是世界上最优雅的解决方案,但您可以使用tr将\n
替换为null
字符并返回
cat test.fastq | tr '\n' '\0' | sed 's/@\x0+\x0//g' | tr '\0' '\n' > test.fasta
试试这个:
sed '/^@$/{N;/\n+$/d}' file
当找到@
时,下一行将用N
追加到模式空间。
如果在下一行中找到
$
,则d
命令将删除这两行。请在代码标记中发布预期输出,然后告知我们。^[+@]+$
带有gm
修饰符。如果您还需要删除空白^[+@]+$\s*
您可以使用grep-Ev'^@[:blank:]*$文件
,该文件已关闭。唯一的问题是,我需要保留其他只有+
的行(例如Sample1和Sample4中的行)。请查看我的编辑:)如果您在问题中明确编写了test.fasta
的所需内容,我会更清楚一些。这太棒了,谢谢!也谢谢你非常清楚的解释。这有助于我学到更多,希望下次我能自己完成。真的很感激!