split function of Perl,Python,Awk
使用中常用到Perl,Python,AWK,R, 虽然Java,C,C++,Vala也学过但是就是不喜欢,你说怎么办。
看来一辈子脚本的命。
Perl
@rray = split /PATTERN/, STRING, LIMIT
可以看出split由2部分(STRING,PATTERN)和可选的LIMIT部分构成,反正split么,万变不离其宗,都要有
你要split的String,split的界定,split的保存,其他的可以外加
我们举一个简单的例子:
> cat test.txt (为了对齐,黄色表示<tab>,绿色表示一个或者多个空格)
[我们要把其中的数字和单词提取出来]
14 yahoo 17:56 Ray---boring
> perl -e '$str="14 yahoo\t 17:56 Ray---boring";@num_word=split /[\s:\-]+/, $str;print "@num_word\n"'
14 yahoo 17 56 Ray boring
复杂一点的例子:
[我们要提取浅蓝色的部分]
../Sample_Tgh_leaf_1_rRNA_removal_20140624/Tgh_leaf_1_rRNA_removal_20140624_ATTCCT_L008_R1_001.fastq.gz
../Sample_Tgh_leaf_1_rRNA_removal_20140624/Tgh_leaf_1_rRNA_removal_20140624_ATTCCT_L008_R2_001.fastq.gz
> perl -e '$str="../Sample_Tgh_leaf_1_rRNA_removal_20140624/Tgh_leaf_1_rRNA_removal_20140624_ATTCCT_L008_R1_001.fastq.gz";$name = join "_", @{[split /_/, [split /\// , $str]->[2]]}[0..7];print "$name\n"'
Tgh_leaf_1_rRNA_removal_20140624_ATTCCT_L008
我们解析一下:
split /\// , $str 把字符串分为3段"..","Sample_Tgh_leaf_1_rRNA_removal_20140624","Tgh_leaf_1_rRNA_removal_20140624_ATTCCT_L008_R1_001.fastq.gz"
[split /\// , $str] 将split的结果变成一个匿名数组
[split /\// , $str]->[2] 是通过引用取得这个匿名数组的第3个元素
[split /_/, [split /\// , $str]->[2]] 是又将split结果变成一个数组(为10个元素) "Tgh","leaf","1","rRNA","removal","20140624","ATTCCT","L008","R1","001.fastq.gz"
由于匿名数组识别数组切片([array]->[0..7]行不通),所以需要把这个数组显性の加上@{}数组标记
@{[split /_/, [split /\// , $str]->[2]]}[0..7] 得到了一个长度为8的数组切片,仍为数组 "Tgh","leaf","1","rRNA","removal","20140624","ATTCCT","L008"
join "_", @rray 把这些元素连接起来,变成一个字符串:Tgh_leaf_1_rRNA_removal_20140624_ATTCCT_L008
[要注意,分隔符部分是PATTERN,即正则表达式,不是字符串]
[其实可以直接只用一个split,什么参数也不带,这样默认的PATTREN为空格,默认的STRNIING为$_种的字符串(这个是Perl的通行证),这个用在函数,for循环等默认参数是$_的很方便]
例如:
A BC DEF GHIJ
KLMN OPQ RS T
U VWX YZ
> perl -e '@rray=("A BC DEF GHIJ","KLMN OPQ RS T","U VWX YZ");@all=();for (@rray){@tmp=split;push @all, @tmp};print "@all\n"'
A BC DEF GHIJ KLMN OPQ RS T U VWX YZ
Python
Python的很人性化,但是不强大,可是通过其他方式提供和更强大的re.split
由于Python的一切都是对象和类,所以么,
简单的例子:
14 yahoo 17:56 Ray---boring
eehhhh, str类的split无法完成上面的分割(也可以但是你要想一想,看Attachment 1 below),只能借助re.split来完成
> py3 -c 'import re;stri="14 yahoo 17:56 Ray---boring";print(re.split("[\s:\-]+",stri));'
['14', 'yahoo', '17', '56', 'Ray', 'boring']
简单的例子:
[我们要提取浅蓝色的部分]
../Sample_Tgh_leaf_1_rRNA_removal_20140624/Tgh_leaf_1_rRNA_removal_20140624_ATTCCT_L008_R1_001.fastq.gz
../Sample_Tgh_leaf_1_rRNA_removal_20140624/Tgh_leaf_1_rRNA_removal_20140624_ATTCCT_L008_R2_001.fastq.gz
> py3 -c 'stri="../Sample_Tgh_leaf_1_rRNA_removal_20140624/Tgh_leaf_1_rRNA_removal_20140624_ATTCCT_L008_R1_001.fastq.gz";print("_".join(stri.split("/")[2].split("_")[0:7]))'
Tgh_leaf_1_rRNA_removal_20140624_ATTCCT
这个用python实现的话就很简单
[split也可以什么都不加,只加一对空括号,默认是以一个或者多个空格分割的]
AWK
split(string,array,sep)是个函数,那种很老的函数
[我们要提取浅蓝色的部分]
../Sample_Tgh_leaf_1_rRNA_removal_20140624/Tgh_leaf_1_rRNA_removal_20140624_ATTCCT_L008_R1_001.fastq.gz
../Sample_Tgh_leaf_1_rRNA_removal_20140624/Tgh_leaf_1_rRNA_removal_20140624_ATTCCT_L008_R2_001.fastq.gz
> echo ../Sample_Tgh_leaf_1_rRNA_removal_20140624/Tgh_leaf_1_rRNA_removal_20140624_ATTCCT_L008_R1_001.fastq.gz | awk '{split($1,aa,"/");split(aa[3],bb,"_");} END{for(i=1;i<=8;i++){if(i<8){printf("%s_",bb[i])}else{print bb[i]}}}'
或者
awk -F'/' '{split($3,bb,"_");}END{for(i=1;i<=8;i++){if(i<8){printf("%s_",bb[i])}else{print bb[i]}}}'
Attachment:
1. py3 -c 'import re;stri="14 yahoo 17:56 Ray---boring";orig=stri.split();part2=orig[2].split(":");part3=orig[3].split("---");print(orig[0:2]+part2+part3);'
split function of Perl,Python,Awk的更多相关文章
- awk,perl,python的命令行参数处理
Python,Perl,Bash命令行参数 Part I 日常经常性的和Perl,Python,Bash打交道,但是又经常性的搞混他们之间,在命令行上的特殊性和index的区别,Python真的是人性 ...
- shell,perl,python的区别
shell+sed+awk严格的讲, shell不是一种编程语言, 但是shell有自己的控制流结构(判断,循环,选择),运算以及函数等编程语言特性, 加上shell命令组织在一起构成脚本, 能够完成 ...
- 正则表达式-使用说明Regular Expression How To (Perl, Python, etc)
notepad++ wiki about regular expression 正则表达式-使用说明Regular Expression How To (Perl, Python, etc) http ...
- RHEL / CentOS Linux Install Core Development Tools Automake, Gcc (C/C++), Perl, Python & Debuggers
how do I install all developer tools such as GNU GCC C/C++ compilers, make and others, after install ...
- RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more infor
在virtualenv环境下使用matplotlib绘图时遇到了这样的问题: >>> import matplotlib.pyplot as pltTraceback (most r ...
- 比较perl+python
作者:iTech出处:http://itech.cnblogs.com/ http://hyperpolyglot.org/scripting perl (1987) python (1991) ...
- function返回值Python特殊语法:filter、map、reduce、lambda
废话就不多说了,开始... Python内置了一些非常有趣但非常有用的函数,充分体现了Python的语言魅力! filter(function, sequence):对sequence中的item顺次 ...
- sql and csharp: Split Function
T-SQL: declare @int int,@prov int,@city int,@str nvarchar(500) set @str='天河麗特青春:中國廣東省廣州市天河區天河路623號天河 ...
- perl实现awk的功能
perl -nla -F/\t/ -e"...", 其中-n: while(<>){...}-l: chomp-a: autosplit-F: 与a结合的分隔模式-e: ...
随机推荐
- npy in c
https://jcastellssala.com/2014/02/01/npy-in-c/
- Android 利用ListView制作带竖线的多彩表格
1.listview与GridView 其实Android本身是有表格控件(GridView)的,但是GridView的每一列的宽度被限定为一样宽,有时设计表格时,列宽不可能为同一宽度,所有可以用Li ...
- MEF 松耦合
MEF天生就有解耦合的特性,虽然它不是为解耦而生,而主要是为插件类应用的开发而设计.如果主要是为了解除耦合的话可以使用IoC,Unity等. Unity 微软的IOC 代码: using System ...
- 知识准备-JOIN/EXISTS
10:40 2013-08-29 JOIN ON...AND A left join B on A.col1=B.col1 and A.col2=xx A left join B on A.col1= ...
- 自动档车的P档和N档的区别
P档时,驻车齿轮在变速箱内被部分锁死,所以此时平地上不踩刹车,车辆有一定的驻车效果.N档就是空档,发动机与传动轴在变速器位置彻底分离,没有连接.因此P档适合停车和驻车,就是到地方了,要熄火时挂P档,拉 ...
- PostgreSQL Replication之第十二章 与Postgres-XC一起工作(6)
12.6 添加节点 Postgres-XC允许您在那个过程中的任何一个时间点添加新的服务器到计划中.所有您需要做的是按照我们之前演示的设置一个节点,并在 控制器上调用CREATE NODE.然后,该系 ...
- 转:python webdriver API 之对话框处理
页面上弹出的对话框是自动化测试经常会遇到的一个问题:很多情况下对话框是一个 iframe,如上一节中介绍的例子,处理起来稍微有点麻烦:但现在很多前端框架的对话框是 div 形式的,这就让我们的处理变得 ...
- 模拟退火法(吊打XXX)Bzoj3680
3680: 吊打XXX Time Limit: 10 Sec Memory Limit: 128 MBSec Special Judge Submit: 308 Solved: 94 [Subm ...
- 20145207 《Java程序设计》第一周学习总结
不好意思,来晚了 别的先不说,先道个歉,放假前跟娄老师多少发生点矛盾,望原谅. 假期忙实习还有一些其他事情,为了认真对待这门课,把剩下的时间留下来,争取一天一章来弥补. 由于没选课加上另一门课没开 ...
- Java基础(40):Java中的集合介绍---Collection与Map
集合类说明及区别Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMap ...