Perl单行命令介绍

Posted 百迈客医学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Perl单行命令介绍相关的知识,希望对你有一定的参考价值。

小编在日常处理数据过程中使用最多的是Perl语言,但有时候因为一个小项目编写一个perl程序实在是麻烦,好在perl有一个非常强大的功能:命令行格式,大大提高了小编的工作效率。下面小编就给大家介绍一下Perl单行命令。


首先介绍一下Perl单行命令常用的相关参数,具体如下:


参数

含义

-a

启动自动分割模式,用空格分割$_储存在@F数组中,相当于@F=split/\s/,$_;可以使用-F指定分割符。

-e

必须参数,执行后面输入的代码。

-F

设置分隔符,与-a参数一起使用。

-i

直接在原文件上执行命令,如果添加后缀则先将原文件备份成后缀文件,然后再在原文件的基础上执行命令。

-l

对输入的行自动chomp,对输出的行自动添加换行符。

-n

按行读取文件,相当于while(<>){...code...}。

-p

自动按行读入且自动输出,相当于while(<>){..code...;print}。


下面小编将以实际代码的方式,带领大家练习一下单行命令。


perl -e必须参数,咱们以经典的问候世界的方式测试一下该命令。


1.perl -e 'print "Hello,world!\n"'  
2.Hello,world!




perl -p按行读取文件内容,经过后面的命令处理完后直接输出,例如用Hi替换测试文件的Hello并输出替换后的结果,可以这样写。


1.perl -pe 's/Hello/Hi/g' test.txt  
2.Hi,world! 




perl -1经常和n搭配去掉读入文件的换行符,输出自动添加换行符。


不使用l参数,通常命令行会这样写:


1.perl -ne 'chomp;print"$_\n" if(/ATAD3C/);' id_name.list  
2.tt215915    ATAD3C 


使用l参数,可以大大简化我们的命令行:


1.perl -lne 'print if(/ATAD3C/);' id_name.list  
2.tt215915    ATAD3C




perl -F与-a使用,更改默认的分隔符,将分割好的数据存储于@F数组中。此功能和awk有写类似,大家在处理数据的过程中可以灵活选择处理数据的方式。


1.perl -F',' -alne  'print$F[0]' test.txt  
2.Hello 




输出目标行的行号及内容($.:perl内置变量,输入行的行号):


1.perl -ne 'chomp;if(/ATAD3C/){print "$. $_\n";}' id_name.list  
2.38 tt215915 ATAD3C
 




perl命令行也可以使用变量,可以不声明,默认是全局变量;如果有必要的话也可以使用my声明私有变量。


1.perl -ne 'chomp;if(/ATAD3C/){$test='happy';print"$test\n";}' id_name.list  
2.happy





最最了不起的是,perl命令行也可以使用awk的END模式。例如输出有多少行匹配到MT,perl命令行可以这样写:


1.perl -lne '$sum++ if(/MT/);END{print $sum}' id_name.list  
2.251 




输出某些行,相当于head和tail的并用


1.perl -ne 'print if 30..40' id_name.list  
2.tt107404    DVL1  
3.tt162576    MXRA8  
4.tt175756    AURKAIP1  
5.tt221978    CCNL2  
6.tt242485    MRPL20  
7.tt235098    ANKRD65  
8.tt205116    TMEM88B  
9.tt179403    VWA1  
10.tt215915    ATAD3C  
11.tt160072    ATAD3B  
12.tt197785    ATAD3A




以上部分示例,sed和awk也同样可以做到,所谓条条大路通罗马,方法千万种,大家可以选择自己喜欢的方式实现自己的目的。


Perl命令行还有更多的写法,大家在日常的工作中可以多多使用命令行。学会单行命令,会大大减少我们编写重复代码的时间,不知道大家学会没有,你还在犹豫什么,赶紧上手试试吧。



延伸阅读




以上是关于Perl单行命令介绍的主要内容,如果未能解决你的问题,请参考以下文章

Perl单行(Perl One-Liners)命令

perl单行命令[03]-awk

第一条perl单行命令---获取blastdb所有数据库的下载地址

Perl one lines

学习一点perl单行命令知识

在 Perl 中编写可识别 Unicode 的单行代码