如何计算多个文件中特定列中的单词?

时间:2018-12-03 17:19:44

标签: perl counting word

我是Perl的新手,必须更改现有的Perl脚本。我需要能够计算整个文件中第1-3列中的所有“ 500”,然后再继续执行该文件的下一个命令,然后再处理下一个文件。我可以有多个输入文件。我猜开始应该是这样的:

@files = <*INPUTFILENAMES>;

foreach $file (@files) {

   open (DATA,$file);

   then do the counts here}

1 个答案:

答案 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];
}