我在工作中需要在Windows环境下使用Perl,并且需要能够找到一个大约1.4GB的csv文件包含的行数。有什么方法可以在最小的资源浪费下完成这个任务吗?
谢谢。
PS:必须在Perl脚本内完成此操作,我们不允许在系统上安装任何新模块。
我在工作中需要在Windows环境下使用Perl,并且需要能够找到一个大约1.4GB的csv文件包含的行数。有什么方法可以在最小的资源浪费下完成这个任务吗?
谢谢。
PS:必须在Perl脚本内完成此操作,我们不允许在系统上安装任何新模块。
是的,不要使用perl。
相反,使用简单的行数计算工具; wc.exe
它是从Unix原始程序移植而来的一组Windows实用程序之一。
http://unxutils.sourceforge.net/
例如;
PS D:\> wc test.pl
12 26 271 test.pl
PS D:\>
这里的12指的是行数,26是单词数,271是字符数。
如果你真的必须使用perl;
D:\>perl -lne "END{print $.;}" < test.pl
12
perl -lne "END { print $. }" myfile.csv
It uses the awesome flip-flop operator.
perl -ne 'BEGIN{$re=qr/^[^"]*(?:"[^"]*"[^"]*)*?"[^"]*$/;}END{print"Count: $t\n";}$t++ unless /$re/../$re/'
wc
不适用于计算 CSV 行数,它非常擅长计算文本行数。Text::CSV
或类似的标准包来进行正确处理。perl -ne "BEGIN{$re=qr/^[^\"]*(?:\"[^\"]*\"[^\"]*)*?\"[^\"]*$/;}END{print qq/Count: $t\n/;};$t++ unless $pq and $pq = /$re/../$re/;"
奇怪的是,The Broken OS的shell将&&
解释为操作系统的条件执行,我无法改变它的想法!!如果我进行转义,它只会将其传递给perl。
edg的答案值得点赞,另一个选择是安装cygwin在Windows上获取wc和其他一些方便的工具。
我当时很蠢,脚本中简单的方法是:
open $extract, "<${extractFileName}" or die ("Cannot read row count of $extractFileName");
$rowCount=0;
while (<$extract>)
{
$rowCount=$rowCount+1;
}
close($extract);