免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 Shell shell/R
最近访问板块 发新帖
查看: 1392 | 回复: 2
打印 上一主题 下一主题

[文本处理] shell/R [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-06-27 15:38 |只看该作者 |倒序浏览
各位大神:
我这里有一个文件file.txt:分别是基因不同位置上的数目,显示如下:
geneA   pos1   3
geneA   pos2   9
geneA   pos4   1
geneA   pos5   2
geneB   pos1   3
geneB   pos3   9
geneB   pos4   3
geneC   pos1   2

geneC   pos2   2

geneC   pos3   8

geneC   pos4   3

geneC   pos5   6

现在想要生成一个矩阵,每一行代表一个基因 每一列代表一个位置,没有信息的地方补0,结果如下:
             pos1   pos2   pos3   pos4   pos5
geneA    3        9        0        1        2   
geneB    3        0        9        3        0
geneC    2        2        8        3        6

请问老师们如何才能实现?谢谢!

论坛徽章:
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
2 [报告]
发表于 2017-06-27 21:45 |只看该作者
回复 1# biobaby


  1. awk '!b[$1]++{c[++s]=$1}{a[$1 $2]=$NF;}END{for(i in b) if(b[i]>p) {p=b[i]} for(i=1;i<=p;i++) {if(i==1) printf "\tpos"i"\t"; else printf "pos"i"\t"}print xxx;for(i=1;i<=s;i++) {printf c[i]"\t";for(j=1;j<=p;j++) {t=a[c[i] "pos"j];if(t) {printf t"\t"} else {printf "0\t"}}" ";print xxx} }' file
  2. pos1 pos2 pos3 pos4 pos5
  3. geneA 3 9 0 1 2
  4. geneB 3 0 9 3 0
  5. geneC 2 2 8 3 6
复制代码

论坛徽章:
0
3 [报告]
发表于 2017-06-28 09:29 |只看该作者
你好 请问可以解释一下吗?回复 2# zxy877298415



您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP