使用中常用到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的更多相关文章

  1. awk,perl,python的命令行参数处理

    Python,Perl,Bash命令行参数 Part I 日常经常性的和Perl,Python,Bash打交道,但是又经常性的搞混他们之间,在命令行上的特殊性和index的区别,Python真的是人性 ...

  2. shell,perl,python的区别

    shell+sed+awk严格的讲, shell不是一种编程语言, 但是shell有自己的控制流结构(判断,循环,选择),运算以及函数等编程语言特性, 加上shell命令组织在一起构成脚本, 能够完成 ...

  3. 正则表达式-使用说明Regular Expression How To (Perl, Python, etc)

    notepad++ wiki about regular expression 正则表达式-使用说明Regular Expression How To (Perl, Python, etc) http ...

  4. 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 ...

  5. 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 ...

  6. 比较perl+python

    作者:iTech出处:http://itech.cnblogs.com/ http://hyperpolyglot.org/scripting   perl (1987) python (1991) ...

  7. function返回值Python特殊语法:filter、map、reduce、lambda

    废话就不多说了,开始... Python内置了一些非常有趣但非常有用的函数,充分体现了Python的语言魅力! filter(function, sequence):对sequence中的item顺次 ...

  8. sql and csharp: Split Function

    T-SQL: declare @int int,@prov int,@city int,@str nvarchar(500) set @str='天河麗特青春:中國廣東省廣州市天河區天河路623號天河 ...

  9. perl实现awk的功能

    perl -nla -F/\t/ -e"...", 其中-n: while(<>){...}-l: chomp-a: autosplit-F: 与a结合的分隔模式-e: ...

随机推荐

  1. iOS:访问地址薄

    地址簿的访问 介绍: 地址簿(Address Book)是一个共享的联系人信息数据库.任何iOS应用程序都可以使用.通过提供常用联系人信息,而不是让每一个应用程序管理独立的联系人列表,可改善用户体验. ...

  2. gpt

    gpt 这里sdb是大于2T的那个VD,具体到您的机器,可以先在parted命令中先用list命令列出磁盘,然后用mklabel gpt来转换,具体如下: (parted) select /dev/s ...

  3. CentOS 6.6 yum 搭建LAMP环境

    CentOS 查看操作系统版本 [root@oa ~]# cat /etc/redhat-releaseCentOS release 6.6 (Final) 参考linux centos yum安装L ...

  4. Vue.2.0.5-混合

    基础 混合是一种灵活的分布式复用 Vue 组件的方式.混合对象可以包含任意组件选项.以组件使用混合对象时,所有混合对象的选项将被混入该组件本身的选项. 例子: // 定义一个混合对象 var myMi ...

  5. iOS调用系统功能发邮件

    使用MFMailComposeViewController发送邮件 1.项目需要导入框架:MessageUI.framework 2.使用的Controller的.h文件中添加代理 MFMailCom ...

  6. EBS R12.2安装,使用的操作系统用户

    在安装时,错误使用了oracle rdbms的对应的操作系统用户,导致安装前,验证时"web server install prerequisites"选项验证失败: (本图其它两 ...

  7. Java基础之一组有用的类——使用正则表达式搜索子字符串(TryRegex)

    控制台程序. 正则表达式只是一个字符串,描述了在其他字符串中搜索匹配的模式.但这不是被动地进行字符序列匹配,正则表达式其实是一个微型程序,用于一种特殊的计算机——状态机.状态机并不是真正的机器,而是软 ...

  8. Java NIO 读数据处理过程

    这两天仿hadoop 写java RPC框架,使用PB作为序列号工具,在写读数据的时候遇到一个小坑.之前写过NIO代码,恰好是错误的代码产生正确的逻辑,误以为自己写对了.现在简单整理一下. 使用NIO ...

  9. Java类加载器深入探索

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 什么是.class文件? class文件全名称为Java class文件,主要在平台无关性和网 ...

  10. tinyxml安装和使用

    下载: 官方文档:http://www.grinninglizard.com/tinyxmldocs/index.html 中文翻译:http://www.cnblogs.com/kex1n/arch ...