Как разделить значения в столбце и посчитать вхождения? - PullRequest
0 голосов
/ 11 декабря 2018

Я очень новичок в Perl.Я прочитал в файле и разделил его на столбцы или «поля».Файл имеет несколько столбцов, но для отслеживания нужно всего 5 конкретных столбцов (назовите их AE).В каждом поле есть определенный тип запроса (Get, Update и т. Д.).Я пытаюсь прочитать в типах запросов и подсчитать, сколько существует каждого типа, но у меня возникают проблемы с разделением каждого конкретного значения.Каков наилучший способ поместить только одно уникальное значение запроса в массив (без повторения) и подсчитать количество вхождений?

Ввод файла выглядит примерно так:

65739483|test|Add|54758|Update|1443|Add|||||testing||||...
65739483|test|Delete|54758|Add|1443|Get|||||test2||||...

Это то, что у меня есть до сих пор.

....
My @fields = split(/\|/, $line);
my $a_column = $fields [2];
my $b_column = $fields [4];
my $c_column = $fields [6];
my $d_column = $fields [8];
my $e_column = $fields [10];

my @request_types = ();

foreach my $new_request ($a_column) {
    if($new_request && $new_request !~ @request_types) {
        push(@request_types, "$new_request");
    }
}
....

Когда я запускаю это, он печатает весь столбец, что-то вроде этого.

Add Delete Delete Update Add ...

Я пробовал вложенные циклы, 2d матрицы и т. Д. И не может заставить его работать.Есть ли гораздо более простой способ приблизиться к этому, что я пропускаю?Словари может быть?

1 Ответ

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

Вы на правильном пути, если хотите использовать хеш-таблицу для отслеживания типов запросов, а не массив:

#!/usr/bin/perl
use warnings;
use strict;
use feature qw/say/;

my %requests;

while (<>) {
  chomp;
  my @fields = split /\|/;
  # Increment the count based on the values in these indexes of the array
  $requests{$_} += 1 for @fields[2,4,6,8,10];
}

say "$_: $requests{$_}" for sort keys %requests;

В приведенном выше примере используется срез массива получить все соответствующие значения из массива @fields, не используя кучу дополнительных переменных, а затем выполнить цикл по ним, увеличивая записи в хэш-таблице.Затем он снова зацикливается на клавишах в этой таблице для отображения результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...