折叠线

时间:2014-11-06 19:45:43

标签: regex

我有一个看起来像这样的文件:

>chr3:11131258-11134670(-)_3301
tcctgaagaaatccaaaacaccatcagatccttctacaaaaggctatact
>chr3:11131258-11134670(-)_3351
caacaaaactggaaaacctggatgaaatggacaaatttctggacagatac
>chr3:11131258-11134670(-)_3401
caggtac
>chr5:146697252-146699855(+)_1
taaggaagcagataatccggcctgatccggggctcaagtcccttccggcc

其中>表示标题行,否则行包含长度为< = 50的字符序列。

我想找到具有字符序列的行<一些阈值( N ),并将它们折叠到前一个序列行中。对示例执行此操作应生成以下文件:

>chr3:11131258-11134670(-)_3301
tcctgaagaaatccaaaacaccatcagatccttctacaaaaggctatact
>chr3:11131258-11134670(-)_3351
caacaaaactggaaaacctggatgaaatggacaaatttctggacagataccaggtac
>chr5:146697252-146699855(+)_1
taaggaagcagataatccggcctgatccggggctcaagtcccttccggcc

我试图用正则表达式来做这件事,但运气不好。我对各种技术持开放态度,但如果可以在命令行上完成,那就更好了。 (我有几个文件要处理,每个文件包含> 100万行)。

1 个答案:

答案 0 :(得分:1)

使用此正则表达式:^(>.*)\n(\w{0,49})$,使用多行选项,以使^$锚定符合每行的开头和结尾。

然后用表示匹配的标题行和第二行的匹配组替换:$1 $2

这是regex101

的演示