免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 Shell perl
1234下一页
最近访问板块 发新帖
查看: 3879 | 回复: 31
打印 上一主题 下一主题

[文本处理] perl [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-08-07 21:07 |只看该作者 |倒序浏览
我的文件 都是这种FASTA格式:
qwer.1         AFRTYUIFGHJKLVBNM
qwer.2         BVXNVFGSFYEBCSHB
qwer.3         HDFKSHFGSERYFIEURHFSUFDSHVBSJEUABFUHABFCAHFBC
rtyuip00.1    AFHBVSFHUACFKUSHDBAKFHAKUFHSADKFUA
hhjkl.1         JDNVKHFBAKHFAKFAFJNSADFJAS
hhjk.2         HFSDHNFKANFAKFIJI
hhjk.3         JNFAJNFALSDFLMAD
hhjk.4         KJGSEGJOAKFFDSMFAPOKEF
...
现在我想把小数点前相同的放到一起,点后的忽略。然后比较小数点前相同的ID后的序列长度,将最长的输出来;若有多条一样长则随机输出其中一条,请大神用perl写个程序。其实就是处理可变剪切,不知道我是否描述清楚了。

论坛徽章:
0
2 [报告]
发表于 2015-08-07 21:10 |只看该作者

perl 匹配

我的文件 都是这种FASTA格式:
qwer.1         AFRTYUIFGHJKLVBNM
qwer.2         BVXNVFGSFYEBCSHB
qwer.3         HDFKSHFGSERYFIEURHFSUFDSHVBSJEUABFUHABFCAHFBC
rtyuip00.1    AFHBVSFHUACFKUSHDBAKFHAKUFHSADKFUA
hhjkl.1         JDNVKHFBAKHFAKFAFJNSADFJAS
hhjk.2         HFSDHNFKANFAKFIJI
hhjk.3         JNFAJNFALSDFLMAD
hhjk.4         KJGSEGJOAKFFDSMFAPOKEF
...
现在我想把小数点前相同的放到一起,点后的忽略。然后比较小数点前相同的ID后的序列长度,将最长的输出来;若有多条一样长则随机输出其中一条,请大神用perl写个程序。其实就是处理可变剪切,不知道我是否描述清楚了。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
3 [报告]
发表于 2015-08-07 21:55 |只看该作者

论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
4 [报告]
发表于 2015-08-07 22:25 |只看该作者
  1. awk -F '[. ]+' '{a[$1]=a[$1]?a[$1]" "$3:$3}END{for(i in a){printf i" ";for(j=1;j<=split(a[i],b," ");j++) {if(length(b[j])>int(t))t=b[j]}print t;t=""}}' file
复制代码
回复 1# super_two


   

论坛徽章:
0
5 [报告]
发表于 2015-08-07 22:31 |只看该作者
我是新手,麻烦您给解释一下,谢谢~回复 2# zxy877298415


   

论坛徽章:
16
CU十二周年纪念徽章
日期:2013-10-24 15:41:3415-16赛季CBA联赛之广东
日期:2015-12-23 21:21:55青铜圣斗士
日期:2015-12-05 10:35:30黄金圣斗士
日期:2015-11-26 20:42:16神斗士
日期:2015-11-19 12:47:50每日论坛发贴之星
日期:2015-11-18 06:20:00程序设计版块每日发帖之星
日期:2015-11-18 06:20:002015亚冠之城南
日期:2015-11-10 19:10:492015亚冠之萨济拖拉机
日期:2015-10-28 18:47:282015亚冠之柏太阳神
日期:2015-08-30 17:21:492015亚冠之山东鲁能
日期:2015-07-07 18:48:39摩羯座
日期:2014-08-29 23:01:42
6 [报告]
发表于 2015-08-07 22:32 |只看该作者
字典加数组 然后sort数组

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2015-08-07 22:45 |只看该作者
为啥不自己先写一个呢? 新手就应该多练习嘛

论坛徽章:
0
8 [报告]
发表于 2015-08-07 23:12 |只看该作者
我写了一个,但是不能运行。我的想法就是用Bio::SeqIO模块,提取出原始文件的ID,和序列,并以内length计算出每个序列的长度。
将提出的ID按照小数点前相同的ID及其序列放进一个数组,然后分别在这个数组中找出最长的序列输出来,但是要将原始ID、序列以及长度都分别对应,我不知道如何才能对应好。不知道我这个思路对不对




回复 7# MMMIX


   

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
9 [报告]
发表于 2015-08-08 00:29 |只看该作者
回复 8# super_two


    不能运行也罢, 贴上来看看.

论坛徽章:
22
处女座
日期:2014-10-11 13:33:292015亚冠之塔什干火车头
日期:2015-07-20 19:59:042015亚冠之塔什干火车头
日期:2015-07-26 10:59:31程序设计版块每日发帖之星
日期:2015-08-05 06:20:00每日论坛发贴之星
日期:2015-08-05 06:20:00程序设计版块每日发帖之星
日期:2015-08-07 06:20:00每日论坛发贴之星
日期:2015-08-07 06:20:002015亚冠之阿尔纳斯尔
日期:2015-10-01 15:23:28白银圣斗士
日期:2015-12-07 17:17:06操作系统版块每日发帖之星
日期:2015-12-27 06:20:002015亚冠之广州富力
日期:2015-07-08 15:48:31程序设计版块每日发帖之星
日期:2015-06-11 22:20:00
10 [报告]
发表于 2015-08-08 00:31 |只看该作者
本帖最后由 聆雨淋夜 于 2015-08-08 00:36 编辑

想得复杂点了
  1. awk -F '[. ]+' '$1!=a{ml=length($3);a=$1;b[$1]=$3}$1==a{if(length($3)>ml){ml=length($3);b[$1]=$3}}END{for(i in b)print i"  "b[i]}' file
复制代码
hhjk  KJGSEGJOAKFFDSMFAPOKEF
hhjkl  JDNVKHFBAKHFAKFAFJNSADFJAS
rtyuip00  AFHBVSFHUACFKUSHDBAKFHAKUFHSADKFUA
qwer  HDFKSHFGSERYFIEURHFSUFDSHVBSJEUABFUHABFCAHFBC
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP