Как посчитать слова в определенных столбцах для нескольких файлов? - PullRequest
0 голосов
/ 03 декабря 2018

Я новичок в Perl и должен изменить существующий скрипт Perl.Мне нужно иметь возможность подсчитать все «500» в столбцах 1-3 во всем файле, прежде чем перейти к следующей команде для этого файла, а затем к следующему файлу.Я могу иметь несколько входных файлов.Я предполагаю, что начало будет примерно таким:

@files = <*INPUTFILENAMES>;

foreach $file (@files) {

   open (DATA,$file);

   then do the counts here}

1 Ответ

0 голосов
/ 04 декабря 2018

Нет необходимости возиться с открытием файловых дескрипторов.Оператор <> выдаст вам все строки из файлов, переданных в командной строке.Таким образом, ваш код может выглядеть примерно так:

#/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];
}
...