Поскольку вам нужны только те, которые имеют уникальные линии, вы можете изменить начало на следующее:
my %hash = ();
my $line = 0;
foreach my $item (@a1, @a2)
{
$line++
$hash{$item}{count}++;
$hash{$item}{line} = $line;
}
close FH;
foreach $item (keys %hash) {
if ($hash{$item} > 1) {
next;
} else {
push @diff, $item;
}
}
my @sorted = sort @diff;
my $lineNo = 0;
foreach my $el(@sorted){
$lineNo = $hash{$el}{line};
print "$el, $lineNo\n";
}
Или что-то очень похожее. Создайте более подробную структуру хэша.
Этот код не проверен, но теория должна быть в порядке.
Я не понимаю первую часть о чтении в 2 массива, если содержимое из одного файла. Вы можете преодолеть это путем создания хэша во время чтения файла:
open FH, "file.txt";
while (<FH>)
{
my @items = split (/ /, $_);
my $item = $items[0];
$line++
$hash{$item}{count}++;
$hash{$item}{line} = $line;
}
close FH;
Но я мог бы неправильно понять эту часть.
Надеюсь, это поможет
Обновление 1:
Я немного растерялся. Моя задача - извлечь из этого файла строки, которые появляются только один раз (либо KB0005
или KB204320
), либо строки, значения которых отличаются в столбце 5.
Так что в выводе я хочу иметь, например:
KB0005 has different value at position 1019 for PKC compared to KB204320 [0.691-0.699]
KB0005 has different value at position 1037 for DNAPK compared to KB204320 [0.585-0.589]
...
или
KB has additional record at position 1045 for PKC
Обновление 2:
Решение FM работает. Подскажите, как мне совместить этот скрипт с другими файлами.
У меня есть список пар, подобных KB0005
и KB204320
, и я хочу выполнить это действие для каждой из них.