Brassicanapus的个人博客分享 http://blog.sciencenet.cn/u/Brassicanapus

博文

perl map函数与数组切片组合使用实现文本列的提取

已有 1816 次阅读 2019-6-20 17:13 |系统分类:科研笔记

注:文中所有¥均为“$”的替代,总有部分“$”不能正常显示,不得已使用¥代替


使用Perl语言对文本逐行处理较为容易,如将fastq格式文本转换为fa文本。而如何便捷地实现文本列的提取并将之赋值到数组供进一步分析使用?


文本 ID_alias


¥head ID_alias


BnaC09g12820DGSBRNA2T00000001001


BnaC09g12810DGSBRNA2T00000003001


BnaC09g12800DGSBRNA2T00000005001


BnaC09g12790DGSBRNA2T00000007001


BnaC09g12780DGSBRNA2T00000008001


BnaC09g12770DGSBRNA2T00000009001


BnaC09g12760DGSBRNA2T00000011001


BnaC09g12750DGSBRNA2T00000012001


BnaC09g12740DGSBRNA2T00000015001


BnaC09g12730DGSBRNA2T00000016001


命令行执行


¥perl -e'@all=<>;@col2=map {(split)[1]}@all;print "@col2\n"'  ID_alias


GSBRNA2T00000001001 GSBRNA2T00000003001 GSBRNA2T00000005001 GSBRNA2T00000007001 GSBRNA2T00000008001 GSBRNA2TA2T00000012001 GSBRNA2T00000015001 GSBRNA2T00000016001


脚本功能:提取ID_alias文本第二列并存储为@col2数组。


分解注释:@all=<>;#将文本信息一行为元素存贮到@all数组中


                 @col2=map {(split)[1]}@all;#使用map函数对 @all中的所有元素进行逐个分割,并将分割后的第二个元素((split)[1]使用数组切片,不使用过渡变量)存贮到 @col2中。


总结:map 函数能够避免使用for循环格式,实现数组/列表—>数组/列表的整体变换与赋值;使用格式有2种,map EXPR,LIST与map {BLOCK} LIST(注意两种用法中“,”逗号的有无)。数组切片能够有效获取目标数据进而避免使用过渡变量,尤其是当文本有很多列时。




当然perl -e'@all=<>; ¥i=0; for(@all) {¥col2[¥i]=(split)[1]; ¥i++}; print "@col2\n"'  ID_alias也能够实现相同的效果,萝卜白菜凭君喜欢!




https://blog.sciencenet.cn/blog-3416088-1186003.html

上一篇:perl脚本实现gene ID号与alias的对应替换
下一篇:gene GO注释信息归类打印
收藏 IP: 220.163.128.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (1 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-23 17:57

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部