2022.5.29 perl 基础 | 统计文件行数的几种方法

前言

用perl统计文件行数。

这里是选择了之前推文中"Carya.fasta.p3in"文件 。

重点小结

这是对于我自己来说的重点。毕竟主要还是写给自己看,也就这么排版了。

  • 直接将文件读入数组,利用标量上下文统计行数
  • for 和while的循环读入每行后计数。对行数计数的标量,一定要定义到循环之前。
  • 调用linux命令wc -l 统计行数:用反引号 ` ` ;用system()或者exec() (涉及到父子进程,没系统学过linux,不是很理解其应用)。这种用法将结果直接赋值给标量,然后打印标量,不用接换行符也可自动换行。还有个问题,就是这部分脚本内容结束后无法再打印出来其它内容,也还不知道具体什么原因。

单独总结下File::CountLines 模块

从github上看,该包从2010年后没再维护。可能跟包的功能比较简单有关,作者觉得没必要再搞太多事。

该包无法通过conda安装。

我这里使用的是conda环境下的perl编译的,最后安装地址也是自动装到了conda下路径。

git clone git://github.com/moritz/File-CountLines.git
File-CountLines/
perl Makefile.PL 
make
make install 
  • 调用File::CountLines : use File::CountLines qw(count_lines);
  • 基础用法
use File::CountLines qw(count_lines);
my $no_of_lines = count_lines('/etc/passwd'); #一般就不需要设置分割方式style,默认native。
  • 指定具体的换行符
my $carriage_returns = count_lines( 
    'path/to/file.txt'  #文件
    style => 'cr',  #指定分割方式
  );
# possible styles are 'native' (the default), 'cr', 'lf'
# native 默认的style值,以"\n" 为换行符。大多数情况是没问题的。
# cr 以回车作为行分隔符(MacOS风格)
# lf 以换行符作为行分隔符(Unix风格)
# crlf 以回车后跟换行符作为分隔符(Microsoft Windows风格)
  • “高级”用法

可以指定任意分割符进行统计,个人理解就是设定了"$/"。但是这个用法,我尝试半天没写出来,暂时还不知道是什么问题。

my $list = count_lines($life, separator => '\end{itemize}');

脚本test.pl内容

#!/usr/bin/env perl
use strict;
use warnings;
#############################
## name:test.pl
#############################
print "## 标量上下文统计行数:\n";
open P3IN,"<","Carya.fasta.p3in" || die;
my @array=<P3IN>;
my $line_index1 = @array;
print "- 读入数组后标量上下文统计行数:$line_index1\n\n";

print "## for 统计行数:\n";
my $line_index2;
foreach my $line (@array){
    $line_index2++;  
}

print "- for循环统计行数:$line_index2\n\n";
close P3IN;

##################################
print "## while 统计行数:\n";
open P3IN,"<","Carya.fasta.p3in" || die;

my $total_num; 
while (<P3IN>){
    $total_num ++;
}
print "- while统计行数:$total_num\n\n";
close P3IN;

################################
use File::CountLines qw(count_lines);

print "## File::CountLines 统计行数\n";
my $nu_of_lines = count_lines('./Carya.fasta.p3in');
print "- File::CountLines统计行数:$nu_of_lines\n\n";

#my $lists = count_lines("Carya.fasta.p3in", separator => '\end{itemize}'); 
#print "File::CountLines统计SSR涉及引物模块数:$lists\n\n";

################################
print "## 调用linux系统命令统计行数\n";
my $total = `wc -l Carya.fasta.p3in`;
print $total; #直接换行?

my $total2 = system("wc -l Carya.fasta.p3in");
print $total2;#直接换行?

my $total3 = exec("wc -l Carya.fasta.p3in");
print $total3;#直接换行?

################################

脚本运行及结果

执行perl test.pl > test.md 得到的内容

## 标量上下文统计行数:
- 读入数组后标量上下文统计行数:432

## for 统计行数:
- for循环统计行数:432

## while 统计行数:
- while统计行数:432

## File::CountLines 统计行数
- File::CountLines统计行数:432

## 调用linux系统命令统计行数
432 Carya.fasta.p3in
432 Carya.fasta.p3in
0432 Carya.fasta.p3in
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342