У меня есть старый perl проект, текстовый анализатор журнала событий, и я получил запрос на сортировку вывода по идентификатору события и удаление повторяющихся событий. Таким образом, анализатор читает текстовый файл и помещает каждое событие в массив. Каждое поле в массиве содержит ha sh с несколькими парами ключ -> значение. один ключ называется последовательностью и содержит номер события. Теперь я хочу отсортировать массив на основе значения последовательности каждого поля массива. Во-вторых, я хочу удалить повторяющиеся идентичные порядковые номера из массива.
Вот некоторый код, как я создаю массив и хэши, чтобы вы получили представление о структуре данных:
open (my $mel, "<", $in_filename) or die "\nFile '$in_filename' does not exist or is not readable.\n";
my $i=0;
my $eventcount = 0;
while (<$mel>) {
# Separate events by "Date/Time" :
if (/^$/) {
next;
}
if (/^Date\/Time:\s(.*)$/) {
if ($eventcount >0) {
$i++;
}
$eventcount++; # eventcount initialized with ‘0’
}
# Gathering information of the MEL event :
if (/^Date\/Time:\s(.*)$/) {$MEL[$i]{date} = $1; next;}
if (/^Sequence number:\s(\d+)$/) {$MEL[$i]{sequence} = $1; next;}
if (/^Event type:\s([0-9|a-f|A-F]{1,6})$/) {$MEL[$i]{type} = lc $1; next;}
if (/^Event category:\s(\w+)$/) {$MEL[$i]{category} = $1; next;}
if (/^Priority:\s(\w+)/) {$MEL[$i]{priority} = $1; next;}
if (/^Description:\s(.*)$/) {$MEL[$i]{description} = $1; next;}
if (/^Event specific codes:\s(.*)$/) {$MEL[$i]{code} = $1; next;}
if (/^Component location:\s(.*)$/) {$MEL[$i]{location} = $1; next;}
if (/^Logged by:\s.*(.)$/) {$MEL[$i]{logged_by} = $1; next;}
if (/^4[dD]\s45\s4[cC]\s48\s(\d\d)/) {$MEL[$i]{version} = hex $1;}
}
Пример события в текстовом файле:
Date/Time: 2/3/20, 12:18:20 PM
Sequence number: 200 <==============
Event type: 5023
Event category: Command
Priority: Informational
Event needs attention: false
Event send alert: false
Event visibility: true
Description: Controller return status/function call for requested operation
Event specific codes: b8/1/0
Component type: Controller
Component location: Shelf 99, Bay A
Logged by: Controller in bay A
Поэтому в основном я хочу отсортировать массив, содержащий ссылки на хэши, на основе значения ключа в га sh.
Секунда Я хочу удалить поле из массива, когда значения ключа также существуют в другом поле массива.
Надеюсь, кто-то понимает, что мне нужно: -)
Возможно ли это?