我是Perl的新手,必须更改现有的Perl脚本。我需要能够计算整个文件中第1-3列中的所有“ 500”,然后再继续执行该文件的下一个命令,然后再处理下一个文件。我可以有多个输入文件。我猜开始应该是这样的:
@files = <*INPUTFILENAMES>;
foreach $file (@files) {
open (DATA,$file);
then do the counts here}
答案 0 :(得分:0)
无需弄乱打开文件句柄。 <>
运算符将为您提供命令行中传递的文件中的所有行。因此,您的代码可以如下所示:
#/usr/bin/perl
use strict;
use warnings;
use feature 'say';
my $count;
while (<>) {
$_ = truncate_to_three_cols($_);
# Increment count if the record contains "500"
# Note: \b marks a word boundary. This means we only
# match "500" on its own. Not 1500 or 5000, etc.
$count++ if /\b500\b/;
}
say "I got $count 500s";
最困难的部分是编写truncate_to_three_cols()
函数。我们在这里真的无济于事,因为您对输入文件的格式没有任何提示。因此,这只是一个示例,假设您有一个制表符分隔的文件。
sub truncate_to_three_cols {
my ($row) = @_;
# Split on tabs
# Take the first three columns
# Join with tabs
return join "\t", (split /\t/, $line)[0 .. 2];
}