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单行命令介绍的主要内容,如果未能解决你的问题,请参考以下文章