程序设计:perl:perl单行脚本

perl单行脚本一般用来提取文件中部分内容或者删除某些部分。使用简单方便,简单介绍下如何操作。 因为大部分都使用windows,所以我们下面的实例以windows为主

perl的安装

windows:下载地址,下载5.16版本。
Linux一般自带perl,不需要安装,不过版本可能比较低,可以下载新的版本。

windows中按win+r快捷键,输入cmd,回车,在弹出界面中输入以下行即可

perl脚本使用

简单介绍常见的应用:

首先说明命令选项,命令选项可以叠加,例如 -n -e 可以写成 -ne

常见命令选项:

 -l表示print每次都在输出回车

-a表示用分隔符(默认为空白,可以用-F/分隔符/指定)对每行进行分割

-n表示每次自动读取文件的一行

-e表示执行引号中的内容 (Linux下用单引号,windows下为双引号,且双引号中的双引号用\"表示)

-F/分隔符/ 表示在-a中使用分隔符分割

其他说明:

-a分割出来的字符串在$F[0],$F[1],$F[2]…

print为输出,和c中printf类似。使用方式为:print “”

perl -ne "print if /./" 输入文件名>输出文件名

删除相邻的重复行

perl -ne "print unless $_ eq $t;$t=$_" 输入文件名>输出文件名

删除所有重复行

perl -ne "print if !$H{$_};$H{$_}=1" 输入文件名>输出文件名

显示第52行

perl -ne "print if 52..52" 输入文件名>输出文件名

显示部分文本——指定行号范围(从第8至第12行,含8和12行)

perl -ne "print if 8..12" 输入文件名>输出文件名

从第3行开始,每7行显示一次

perl -ne "print if $.%7==3" 输入文件名>输出文件名

数据

0.19778E+03 0.19728E+03 0.20200E+03 0.21395E+03 0.22597E+03 0.23904E+03
0.25077E+03 0.26367E+03 0.26713E+03 0.26420E+03 0.25833E+03 0.25192E+03
0.24476E+03 0.23800E+03 0.23291E+03 0.22687E+03 0.21867E+03 0.21206E+03
0.20985E+03 0.20602E+03 0.19853E+03 0.19696E+03 0.19905E+03 0.20422E+03
0.21108E+03 0.21936E+03 0.22464E+03 0.22993E+03 0.23543E+03 0.24113E+03
0.24695E+03 0.25255E+03 0.25822E+03 0.26379E+03 0.26932E+03 0.27456E+03
0.27992E+03 0.28508E+03 0.28902E+03 0.29143E+03 0.29338E+03 0.29530E+03
0.18766E-06 0.11917E-05 0.27389E-05 0.32299E-05 0.36746E-05 0.39554E-05
0.39677E-05 0.39495E-05 0.38053E-05 0.36257E-05 0.34473E-05 0.32739E-05
0.31184E-05 0.30011E-05 0.30184E-05 0.28977E-05 0.26138E-05 0.24093E-05
0.23376E-05 0.22763E-05 0.22623E-05 0.22913E-05 0.25811E-05 0.45228E-05
0.11139E-04 0.32733E-04 0.59882E-04 0.98122E-04 0.15438E-03 0.23727E-03
0.38423E-03 0.56571E-03 0.86361E-03 0.12832E-02 0.19571E-02 0.28807E-02
0.40076E-02 0.56100E-02 0.77936E-02 0.93611E-02 0.11030E-01 0.12630E-01
 

提取奇数行的第 1、4列

perl  -lane "print \"$F[0] $F[3]\" if($.%2==1)" 1.txt>2.txt

提取第一行和3的倍数行

perl  -lane "print  if($.==1 or $.%3==0)" 1.txt>2.txt

说明:

以上文件是空格分隔的

-l表示print每次都在输出回车

-a表示用默认分隔符(空白)对每行进行分割

-n表示每次自动读取文件的一行

-e表示执行引号中的内容

1.txt为输入文件

2.txt为输出文件

print表示输出

\“$F[0] $F[3]\”表示,输出每行中的第1、4列

if($.%2==1)中,$.表示行号,%表示取模

if($.==1 or $.%3==0) 表示 第一行和3的倍数行,$.表示行号,或者用or,并且用 and

0.19778E+03,0.19728E+03,0.20200E+03,0.21395E+03,0.22597E+03,0.23904E+03
0.25077E+03,0.26367E+03,0.26713E+03,0.26420E+03,0.25833E+03,0.25192E+03
0.24476E+03,0.23800E+03,0.23291E+03,0.22687E+03,0.21867E+03,0.21206E+03
0.20985E+03,0.20602E+03,0.19853E+03,0.19696E+03,0.19905E+03,0.20422E+03
0.21108E+03,0.21936E+03,0.22464E+03,0.22993E+03,0.23543E+03,0.24113E+03
0.24695E+03,0.25255E+03,0.25822E+03,0.26379E+03,0.26932E+03,0.27456E+03
0.27992E+03,0.28508E+03,0.28902E+03,0.29143E+03,0.29338E+03,0.29530E+03
0.18766E-06,0.11917E-05,0.27389E-05,0.32299E-05,0.36746E-05,0.39554E-05
0.39677E-05,0.39495E-05,0.38053E-05,0.36257E-05,0.34473E-05,0.32739E-05
0.31184E-05,0.30011E-05,0.30184E-05,0.28977E-05,0.26138E-05,0.24093E-05
0.23376E-05,0.22763E-05,0.22623E-05,0.22913E-05,0.25811E-05,0.45228E-05
0.11139E-04,0.32733E-04,0.59882E-04,0.98122E-04,0.15438E-03,0.23727E-03
0.38423E-03,0.56571E-03,0.86361E-03,0.12832E-02,0.19571E-02,0.28807E-02
0.40076E-02,0.56100E-02,0.77936E-02,0.93611E-02,0.11030E-01,0.12630E-01

文件以逗号分隔

提取奇数行的第 1、4列

perl -F/,/ -lane "print \"$F[0] $F[3]\" if($.%2==1)" 2.txt>out.txt

-F/,/ 表示以逗号分隔

perl参数说明

$. 表示行号
  • 程序设计/perl/perl单行脚本.txt
  • 最后更改: 2021/10/12 15:24
  • 106.11.154.37