免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3717 | 回复: 12
打印 上一主题 下一主题

求教怎样合并行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-02 10:32 |只看该作者 |倒序浏览
我想把下列文件:
>se1
aaaaaaaaaaaaa
bbbbbbbbbbbbb
ccccccccccccccccc
>se2
ccccccccccccccccc
bbbbbbbbbbbbb
aaaaaaaaaaaaa
>se3
bbbbbbbbbbbbb
ccccccccccccccccc
aaaaaaaaaaaaa

处理成下面这样:
>se1
aaaaaaaaaaaabbbbbbbbbbbbcccccccccc
>se2
ccccccccccccccccbbbbbbbbbbbaaaaaaaaa
>se3
bbbbbbbbbbbbccccccccccccccaaaaaaaaa
有什么好办法来处理,请求帮助一下新手.

求职 : 技术支持/维
论坛徽章:
0
2 [报告]
发表于 2010-11-02 10:52 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
3 [报告]
发表于 2010-11-02 15:14 |只看该作者
  1. perl -pe "chomp; s/^(>se.*)$/\n$1\n/" t
复制代码
同楼上的,第一行的 >se 会多个空行,求高人解决这个问题

论坛徽章:
0
4 [报告]
发表于 2010-11-02 15:50 |只看该作者
  1. #!/usr/bin/perl

  2. use strict;
  3. use warnings;

  4. my $n = 0;
  5. while (<DATA>) {
  6.         chomp;
  7.          if (/>se/i) {
  8.                  print "\n" if ($n);
  9.                  print "$_\n";
  10.                  $n++;
  11.          }
  12.          else { print; }
  13. }

  14. <STDIN>;

  15. __DATA__
  16. >se1
  17. aaaaaaaaaaaaa
  18. bbbbbbbbbbbbb
  19. ccccccccccccccccc
  20. >se2
  21. ccccccccccccccccc
  22. bbbbbbbbbbbbb
  23. aaaaaaaaaaaaa
  24. >se3
  25. bbbbbbbbbbbbb
  26. ccccccccccccccccc
  27. aaaaaaaaaaaaa
复制代码
如果需要更多的精细控制,可以啰嗦点写。

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
5 [报告]
发表于 2010-11-02 15:57 |只看该作者
回复 4# iamlimeng


    吐槽无力啊,争取一行解决问题

论坛徽章:
7
巳蛇
日期:2014-04-10 08:54:57白羊座
日期:2014-04-22 20:06:262015年亚洲杯之沙特阿拉伯
日期:2015-02-10 14:18:532015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之吉达阿赫利
日期:2015-06-02 11:34:112015亚冠之武里南联
日期:2015-06-24 12:13:082015亚冠之阿尔纳斯尔
日期:2015-08-03 09:08:25
6 [报告]
发表于 2010-11-02 16:15 |只看该作者
本帖最后由 Monox 于 2010-11-02 16:25 编辑

回复 1# estbio
这其实是一个生物信息分析问题,给一个解决方案:

  1. $ perl -0076lnE '($anno,@seq) = split /\n/; say ">$anno\n", @seq if $anno' test.fa
复制代码
输出:
  1. >se1
  2. aaaaaaaaaaaaabbbbbbbbbbbbbccccccccccccccccc
  3. >se2
  4. cccccccccccccccccbbbbbbbbbbbbbaaaaaaaaaaaaa
  5. >se3
  6. bbbbbbbbbbbbbcccccccccccccccccaaaaaaaaaaaaa
复制代码

论坛徽章:
0
7 [报告]
发表于 2010-11-02 16:25 |只看该作者

  1. use Bio::SeqIO;

  2. my $o_seqi = Bio::SeqIO->new(
  3.     -file => $file,
  4.     -format => 'fasta',
  5. );

  6. while ( my $o_seq = $o_seqi->next_seq ) {
  7.     print ">", $o_seq->id, "\n";
  8.     print $o_seq->seq, "\n";
  9. }
复制代码

论坛徽章:
7
巳蛇
日期:2014-04-10 08:54:57白羊座
日期:2014-04-22 20:06:262015年亚洲杯之沙特阿拉伯
日期:2015-02-10 14:18:532015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之吉达阿赫利
日期:2015-06-02 11:34:112015亚冠之武里南联
日期:2015-06-24 12:13:082015亚冠之阿尔纳斯尔
日期:2015-08-03 09:08:25
8 [报告]
发表于 2010-11-02 16:29 |只看该作者
回复 6# Monox

或许下面这个方案有些人会更喜欢:
  1. $ perl -0076lnE '($anno,@seq) = split /\n/; say ">$anno\n", @seq unless $. == 1' test.fa
复制代码
输出是一样的。

论坛徽章:
0
9 [报告]
发表于 2010-11-02 16:32 |只看该作者
一行的代码固然好,对于新手来说,完全没有可读性,不利于其入门。

论坛徽章:
0
10 [报告]
发表于 2010-11-02 16:35 |只看该作者
别追求一行代码,多写几行是好习惯。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP