在 SED/AWK/Perl 一行中使用条件连接 FASTA 文件中的换行符

发布于 2024-08-23 23:36:39 字数 394 浏览 2 评论 0原文

我有一个看起来像这样的数据

> sq1
foofoofoobar
foofoofoo
> sq2
quxquxquxbar
quxquxquxbar
quxx
> sq3
paxpaxpax
pax

我想做的是将它们连接成一行:

> sq1 foofoofoobarfoofoofoo
> sq2 quxquxquxbarquxquxquxbarquxx
> sq3 paxpaxpaxpax

我尝试了这段代码但失败了。

sed -e 'te' -e 'H;$!d;:e' -e 'x;/^$/d;s/\n//g'

正确的做法是什么?

I have a data that looks like this

> sq1
foofoofoobar
foofoofoo
> sq2
quxquxquxbar
quxquxquxbar
quxx
> sq3
paxpaxpax
pax

What I want to do is to join them into one lines:

> sq1 foofoofoobarfoofoofoo
> sq2 quxquxquxbarquxquxquxbarquxx
> sq3 paxpaxpaxpax

I tried this code but fail.

sed -e 'te' -e 'H;$!d;:e' -e 'x;/^$/d;s/\n//g'

What's the right way to do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

只怪假的太真实 2024-08-30 23:36:39
$ awk '/^>/&&NR>1{print "";}{ printf "%s",/^>/ ? $0" ":$0 }' file 
> sq1 foofoofoobarfoofoofoo
> sq2 quxquxquxbarquxquxquxbarquxx
> sq3 paxpaxpaxpax
$ awk '/^>/&&NR>1{print "";}{ printf "%s",/^>/ ? $0" ":$0 }' file 
> sq1 foofoofoobarfoofoofoo
> sq2 quxquxquxbarquxquxquxbarquxx
> sq3 paxpaxpaxpax
囍孤女 2024-08-30 23:36:39

这是使用 sed 执行您想要的操作的一种方法:

sed -n '1{x;d;x};${H;x;s/\n/ /1;s/\n//g;p;b};/^>/{x;s/\n/ /1;s/\n//g;p;b};H'

This is one way to do what you want using sed:

sed -n '1{x;d;x};${H;x;s/\n/ /1;s/\n//g;p;b};/^>/{x;s/\n/ /1;s/\n//g;p;b};H'
悟红尘 2024-08-30 23:36:39
perl -ne '!/^>/ ? chomp($p) : (chomp $_, $_.=" "); print $p; $p = $_; END{print $p}

...当然,如果需要的话可以写得更短。

perl -ne '!/^>/ ? chomp($p) : (chomp $_, $_.=" "); print $p; $p = $_; END{print $p}

... which, of course, could be written a lot shorter if desired.

紅太極 2024-08-30 23:36:39

这可能对你有用:

sed ':a;$!{N;ba};s/\n//g;s/> sq[0-9]*/\n& /g;s/.//' file

或者这个:

 sed ':a;$!N;s/\n\([^>]\)/\a\1/;ta;s/\a/ /;s///g;P;D' file

或者这个:

 awk -vRS='> sq' '{sub(/^/,RS);sub(/\n/," ");gsub(/\n/,"")};NR>1' file

This is might work for you:

sed ':a;$!{N;ba};s/\n//g;s/> sq[0-9]*/\n& /g;s/.//' file

or this:

 sed ':a;$!N;s/\n\([^>]\)/\a\1/;ta;s/\a/ /;s///g;P;D' file

or this:

 awk -vRS='> sq' '{sub(/^/,RS);sub(/\n/," ");gsub(/\n/,"")};NR>1' file
奈何桥上唱咆哮 2024-08-30 23:36:39

我能找到的最短的 sed 解决方案:

sed -n '/^>/!{H;$!b};s/$/ /;x;1b;s/\n//g;p'

Shortest sed solution what I was able to find:

sed -n '/^>/!{H;$!b};s/$/ /;x;1b;s/\n//g;p'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文