perl oneline
- 可参考博客:http://blog.csdn.net/carzyer/article/details/5117429
Perl常用命令行参数概览
-e 指定字符串以作为脚本(多个字符串迭加)执行
-M/-m 和 use 模块名 一样. 如果不想引入模块的缺省值, 你可以使用 -m. -m模块名 和 use 模块名() 一样.
-I (这是一个大写i)指定目录以搜索标准位置前的模块
-w 打开警告
-c 进行语法检查但并不执行程序。
-0 (这是个零)跟一个16 进制或8进制数值,指定输入记录分隔符
-l (这个是L)跟一个16 进制或8进制数值,指定输出记录分隔符
-a 打开自动分离 (split) 模式. 空格是缺省的分离号. 输入根据分离号被分离然后放入缺省数组 @F.
-F 指定分割符 -a 使用的模式
-i 在适当的位置编辑文件
-n 使用 <> 将所有 @ARGV 参数当作文件来逐个运行
-p 和 -n 一样,但是还会打印 $_ 的内容
-00 打开段落模式
-0777 打开slurp 模式 (即可以一次把整个文件读入) , 这与把$/设为空字符和 undef 一样效果.
-l 单独使用,有两个效果, 第一自动 chomp 输入分隔号, 第二 把$/值付给$\( 这样 print 的时候就会自动在末尾加 \n )
-c
这个参数编译 Perl 程序但不会真正运行它. 由此检查所有语法错误.事实上,它会执行任何BEGIN或CHECK块以及任何use指示字。
1.输出随机的8个字符串,包含0-9,a-z
perl -le 'print map { ("a".."z",0..9)[rand 36] } 1..8'
2.对某一列求和
perl -lane '$sum += $F[0]; END { print $sum }'
3.在字符串末尾加上换行符
perl -pe 's/$/\n/' file
4.去掉空行
perl -ne 'print unless /^$/'
5.在所有字符中间加一个空格
perl -lpe 's// /g'
6.打印每行的行号
perl -pe '$_ = "$. $_"'
如果含有空行,只打印非空行行号
perl -pe '$_ = "$. $_" if /./'
打印匹配到的行和行号,没有匹配到的没有行号但是会输出
perl -pe '$_ = ++$x." $_" if /regex/'
只打印匹配到的行和行号
perl -ne 'print ++$x." $_" if /regex/'
7.计算多少行
perl -lne 'END { print $. }'
perl -ne '}{print $.'
8.打印非空的行
perl -le 'print ~~grep{/./}<>'
9.打印每一行最小的值
perl -MList::Util=min -alne 'print min @F'
10.将一行id对应多个GO的结果处理成一个id对应一个go的结果
perl -lane '$a=@F;foreach$b(1..$#F){print qq{$F[0]\t$F[$b]}}' Bn.GO >Bn_oneline.annot
12.统计SOAPnuke结果的碱基数据量
ls /zfssz3/ST_BIGDATA/yueyao/03.TimeTest/Rub_denovo/00.data_Filter/result/*/Basic_Statistics_of_Sequencing_Quality.txt|perl -lane '@a=split/\//,$_;open IN,$_ or die $!;while(<IN>){chmomp;@b=split/\t/,$_;if ($b[0]=~/Total number of bases/){$c=$b[2]/1024/1024;print qq{$a[-2]\t$c}}}'
13.查看统计软件运行时间
ls *_run_time.txt|perl -lane '$name=$_ ;open IN,$_ or die $!;while(<IN>){chomp;if(/^\w+/){$time=$_/60/60;print qq{$name\t$time}}}'
14.将一行id一行序列的mapper.fa文件去除重复的序列(针对mirdeep2的报错进行的处理)
perl -e 'while(<>){chomp;if(/^>/){$id=$_;}else{$seq=$_;$hash{$id}=$seq;}}foreach $b(keys %hash){print qq{$b\n$hash{$b}\n}}' mapper.fa > new.fa
15.根据id提取想要的fasta文件(来自CJ的perl oneliner)
# 批量提取fasta
perl -lne 'if($switch){if(/^>/){$flag=0;m/^>?(\S+).*?$/;$flag=1 if $need{$1};}print if $flag}else{m/^>?(\S+).*?$/;$need{$1}++}$switch=1 if eof(ARGV)' Clean.ids Unigenes.fasta
# 批量过滤fasta
perl -lne 'if($switch){if(/^>/){$flag=1;m/^>?(\S+).*?$/;$flag=0 if $need{$1};}print if $flag}else{m/^>?(\S+).*?$/;$need{$1}++}$switch=1 if eof(ARGV)' NoPlant.ids Unigenes.fasta
16.查看测序数据属于phred64还是phred33 hiseqxten的是35-75属于phred33
les FCHCNLGALXX_L8_WHEGGhnwTAAIRAAPEI-57_2.fq.gz|head -n 999 | awk '{if(NR%4==0) printf("%s",$0);}'|od -A n -t u1 -v|awk 'BEGIN{min=100;max=0;}{for(i=1;i<=NF;i++) {if($i>max) max=$i; if($i<min) min=$i;}}END{if(max<=74 && min<59) print "Phred+33";else if(max>73 && min>=64) print "Phred+64";else if(min>=59 && min<64 && max>73) print "Solexa+64";else print "Unknown score encoding";print "( " min ", " max, ")";}'
17.根据一个列表id在另外一个列表中提取表达量,注意所存的哈希可能需要修改
perl -e '$gene=shift;$fpkm=shift;open LIST,$gene;while(<LIST>){chomp;$id=(split/\t/,$_)[1];$pathway=(split /\t/,$_)[0];$hash{$id}=$pathway}close LIST;open FPKM,$fpkm;while(<FPKM>){chomp;if(/^gene_id/){print qq{$_\n};}else{$gene_id=(split/\t/,$_)[0];if(exists $hash{$gene_id}){print qq{$_\n};}}}close FPKM;' RUB_4Path_genelist.txt all.gene.FPKM.changeName.xls >RUB_4Path_geneFPKM.txt
18.比较装逼的写法?和:表示if和else,一定要搭配使用}{表示统计行号
perl -lane '/^H/?next:$F[2]<=2000?print:{};}{print $.;' SRPP_REF_CPT.pic.lst
tig02285153_pilon CUFF.23689.3 1756 2932 20254 REF
19.引用和解引用的方法,引用的好处是可以直接将一个数组当做值赋值给list,而且一个地址可以被多个变量引用
perl -le '$a=1;@b=(1,2,3);%c=('abc'=>20);$aref=\$a;$bref=\@b;$cref=\%c;print qq{first_method:\t$$aref\t@$bref\t%$ref\nsecond_method:\t${$aref}\t@{$bref}\t${$cref}{'abc'}\nthird_method:\tnull\t$bref->[0]\t$cref->{'abc'}};'
20.打印想要打印的行
perl -ne '@lines = (2,4,6);print qq/$.\t$_/if grep{$_== $.}@lines;' 05.SVDetect/test.fa
21.去掉文件里面重复的行,同时也不改变文件本身的顺序
perl -e 'while(<>){chomp;push @arr,$_;};@arr = grep { ++$hash{$_} < 2 } @arr; print join("\n",@arr);print"\n"' xxx.txt >xxx.txt2
22.生成华大有参转录组计算差异表达需要的输入文件
for i in `ls /ldfssz1/ST_BIGDATA/USER/yueyao/01.testRNAseq/02.DiffExp/choice_re_do/*.gene.fpkm.xls`;do a=`echo $i|cut -d'/' -f9|cut -d'.' -f1`;printf $a"\t"$i"\n";done
23.对mutation格式的文件进行处理
les /hwfssz1/ST_BIGDATA/USER/sunysh/Data/TCGA/Cancer_project/BRCA/TCGA-BRCA.sort.mutation|cut -f2|perl -lane '$chr=(split/:/,$_)[0];$gene=(split/:/,$_)[1];($gene=~/(\d+)(\w+>\w+)/||$gene=~/(\d+_\d+)(\w+)/||$gene=~/(\d+\w+)/)?{print qq{$chr\t$1\t$2}}:next}{'|les
24.将序列格式化为想要的一行id和多行序列,正则里面设置想要每行打印的碱基数,可能会有bug
perl -e '$/=">";<>;while(<>){chomp;($id,$seq)=(split /\n/,$_,2)[0,1];$seq=~s/\n//g;$seq=~ s/(\w{30})/$1\n/g;print ">",$id,"\n",$seq;}' in.fa >out.fa
25.将序列由多行变成一行
perl -e '$/=">";<>;while(<>){chomp;($id,$seq)=(split/\n/,$_,2)[0,1];$seq=~s/\n//g;print ">".$id."\n".$seq."\n";}' in.fa >out.fa
26.根据一个gene与symbol的映射关系,将另外一个文件的gene替换成symbol
perl -e '$gene2lable=shift;$gene2annot=shift;open GENE,$gene2lable or die $!;while(<GENE>){chomp;$tmp=(split/\t/,$_)[0],$gene=(split/-/,$tmp)[0];$hash{$gene}=$tmp;}close GENE;open ANNOT,$gene2annot or die $!;while($line=<ANNOT>){chomp($line);$id=(split/\t/,$line)[0];$annot=(split/\t/,$line,2)[1];if(exists $hash{$id}){print qq{$hash{$id}\t$annot\n}}}close ANNOT;' bg_unique.ko R.format.Unigene.fa.ko >R.W.ko
27.根据gene与ensemble的映射关系添加一列gene id
perl -e '$gene2lable=shift;$gene2annot=shift;open GENE,$gene2lable or die $!;while(<GENE>){chomp;$gene=(split/\t/,$_)[0];$ensemble=(split/\t/,$_)[1];$hash{$ensemble}=$gene;}close GENE;open ANNOT,$gene2annot or die $!;$title=<ANNOT>;chomp($title);print qq{GeneID\t$title};while($line=<ANNOT>){chomp($line);$id=(split/\t/,$line)[0];$annot=(split/\t/,$line,2)[1];if(exists $hash{$id}){print qq{$id\t$hash{$id}\t$annot\n}}}close ANNOT;' ../ensemble2gene format.kongbai-VS-10033.DEGseq_Method.GeneDiffExp.xls >gene.format.kongbai-VS-10033.DEGseq_Method.GeneDiffExp.xls
28.将基因id格式化为差异表达基因的格式,第五列为倍数值,一般用来判断是上调还是下调
perl -le 'print qq{GeneID\tLength\tA-Expression\tB-Expression\tlog2Ratio(A/B)\tq-value(Storey et al. 2003)\tUp-Down-Regulation(A/B)\tp-value};while(<>){$id=(split)[0];print qq{$id\tNA\tNA\tNA\tNA\tNA\tNA\tNA}};'
29.将一行id一行GO变成一行id多行GO,GO中间用,隔开
perl -lane 'push @{$hash{$F[0]}},$F[1];END{foreach $key (keys %hash){print qq{$key\t},join(",",@{$hash{$key}}) }} XXX.GO
30.统计All_dependence.txt所有的shell命令个数
les list/All_dependence.txt |perl -lane '$a=(split/:/,$F[0])[0];$b=(split/:/,$F[1])[0];push @arr,$a;push @arr,$b;END{foreach$m(@arr){print qq{$m}}}'|sort|uniq|les list/All_dependence.txt |perl -lane '$a=(split/:/,$F[0])[0];$b=(split/:/,$F[1])[0];push @arr,$a;push @arr,$b;END{foreach$m(@arr){print qq{$m}}}'|sort|uniq|wc -l
31.去掉某几列的
perl -F"," -lane 'print $F[0].",".$F[2].",".join(",",@F[4..13])'perl -F"," -lane 'print $F[0].",".$F[2].",".join(",",@F[4..13])' gene_symbol_count_matrix.csv >gene_symbol_count_matrix.csv2
32.打印重复的行
perl -lane '$map{$_}++;END{foreach(%map){print $_ if($map{$_}>1);}}' name.lst
perl oneline的更多相关文章
- perl删除文件前几列
perl oneline 快速删除文件的前两列代码如下 6 perl -lane 'print join("\t",@F[2..$#F])' test.txt 输出效果
- perl 脚本测试
原文地址: http://blog.csdn.net/johnny710vip/article/details/8905239 这是一篇关于perl脚本测试的总结性文章,其中提到了很多实用的 ...
- 在vi中使用perltidy格式化perl代码
格式优美的perl代码不但让人赏心悦目,并且能够方便阅读. perltidy的是sourceforge的一个小项目,在我们写完乱七八糟的代码后,他能像变魔术一样把代码整理得漂美丽亮,快来体验一下吧!! ...
- perl学习笔记之:模式匹配,模块,文档
Perl语言的最大特点,也是Perl作为CGI首选语言的最大特点,是它的模式匹配操作符.Perl语言的强大的文本处理能力正是通过其内嵌的对模式匹配的支持体现的.模式通过创建正则表达式实现.Perl的正 ...
- 精通Perl(第2版)
精通Perl(第2版)(通往Perl大师之路必读经典书籍,体现了一种编程思维,能够帮你解决很多实际的问题) [美]brian d foy(布瑞恩·D·福瓦)著 王兴宇 刘宸宇 译 ISBN 978 ...
- perl
introduction: http://www.yiibai.com/perl/perl_introduction.html functions: http://www.yiibai.com/per ...
- perl学习之路3
Perl编程之路3 标签: perl 列表与数组 Perl里面代表复数的就是列表和数组 列表(list)指的是标量的有序集合, 而数组(array)则是存储列表的变量. 在Perl这两个属于尝尝混 ...
- perl学习之路2
这些主要是从 "小骆驼" 书上粘贴或者摘抄出来的, 个人认为需要记的语法知识 "在某些情况下, 你可能需要在一台机器上写程序, 再传送到另一台机器上运行.这时候, 请使用 ...
- perl学习之路1
一切要从Hollo world开始 公司要用perl....啊, 不会只能自学了, 毕竟是公司啊, 不是学校...公司不学习就滚蛋了...惨惨惨 因为是学习嘛, 感觉开虚拟机比较麻烦所以直接用了个 瘟 ...
随机推荐
- 函数式编程—函数的关系—is-a、has-a、use-a
is-a:函数的实现与函数类型的关系: has-a:匿名(闭包)函数的创建者与匿名函数的关系:匿名函数与环境和上下文(函数)的关系: use-a:高阶函数与参量函数的关系: 函数式编程的基本功之一就是 ...
- hihocoder#1046: K个串
[传送门] 这种区间内相同数字只能被统计一次/只有区间内数字都不相同才对答案有贡献的题都可以用扫描线扫右端点,表示当前区间右端点为$r$.然后当前线段树/树状数组维护区间左端点为$[1,r)$时对应的 ...
- luogu_3645: 雅加达的摩天楼
雅加达的摩天楼 题意描述: 有\(N\)座摩天楼,从左到右依次编号为\(0\)到\(N-1\). 有\(M\)个信息传递员,编号依次为\(0\)到\(M-1\).编号为i的传递员最初在编号为\(B_i ...
- 洛谷 P2040 打开所有的灯 题解
这个题写其他题解的dalao们已经解释了 一个灯最多开一次(如果实在不知道为什么看评论区) 这个题一共就9个灯嘛,对吧 递归好想不好写(对于我这种蒟蒻) 所以我写了一个所有题解中最暴力的 直接枚举9个 ...
- jupyter的补充
目录 jupyter 的使用 常用命令模式快捷键: 常用编辑模式快捷键: jupyter 的使用 Cells状态分为命令模式和编辑模式,Enter进入编辑模式,ESC进入命令模式,命令模式和编辑模式下 ...
- mac 搭建Java Spring boot 环境(idea)
首先安装插件 安装下面的这个插件 然后重启idea,新建工程 选择新建 Springboot 框架 改写项目名称 选择类型 设置工程名称 删除多余的文件 编译工程 然后运行 1. 2. 参考: htt ...
- CSS样式的引入方式
test.css div{ color:yellow; } 在html中引入 <link href="test.css" type="text/css" ...
- mfs分布式文件系统,分布式存储,高可用(pacemaker+corosync+pcs),磁盘共享(iscsi),fence解决脑裂问题
一.MFS概述 MooseFS是一个分布式存储的框架,其具有如下特性:(1)通用文件系统,不需要修改上层应用就可以使用(那些需要专门api的dfs很麻烦!).(2)可以在线扩容,体系架构可伸缩性极强. ...
- cgdsR 下载TCGA数据
TCGA 的数据可以在5个组织机构获取,它们都提供了类似的接口来供用户下载数据. cgdsR 包是cBioPortal 提供的R包 http://www.cbioportal.org/rmatlab ...
- Mercurial 的hook使用
1. Handling repository events with hooks可以通过Mercurial版本管理工具提供的hooks机制来处理repo的各种事件,从而实现对Mercurial的扩展, ...