|
注:文中所有¥均为“$”的替代,总有部分“$”不能正常显示,不得已使用¥代替
使用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也能够实现相同的效果,萝卜白菜凭君喜欢!
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-10-20 01:49
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社