Как вы хотите, чтобы ваш вывод выглядел? Список всех уникальных устройств в файле $ input. Или для каждой строки в $ inputfile выведите строку, отображающую, какое это устройство?
Я отвечу на последний вопрос, так как вы можете сделать уникальную сортировку, если это необходимо. Кроме того, похоже, что каждый UA имеет несколько устройств. В качестве общего подхода вы можете хранить имена UA в качестве ключей в вашем хэше, и значением может быть либо массив имен устройств, либо строка имен устройств с разделителями.
Если вы знаете, что имена устройств являются элементами 2..10, вы можете использовать операторы slice и join для создания, например, разделенной запятыми строки имен устройств. Эта строка будет значением, назначенным для имени ключа UA.
#!/usr/bin/perl
use warnings;
use strict;
our $inputfile = $ARGV[0];
our $outputfile = "$inputfile" . '.devidx';
our $devid_file = "devid_master"; # the file that has the UA and the corresponding device info
our %ua_list_hash = ();
# Create a list of mobile user agents in the devid_master file
open DEVID, "$devid_file" or die "can't open $devid_file";
while(<DEVID>) {
chomp;
my @devidfile = split /\t/;
my @slice = @devidfile[2..10];
my $deviceString = join(",", @slice);
$ua_list_hash{$devidfile[1]} = $deviceString;
}
my $outputfilename = "output.txt";
open IN,"$inputfile" or die "can't open $inputfile";
open OUT,"$outputfilename" or die "can't open $outputfilename";
while(<IN>) {
chomp;
my @hhfile = split /\t/;
if(exists $ua_list_hash{$hhfile[24]}) {
print OUT $ua_list_hash{$hhfile[24]}."\n";
}
}
close IN;
close OUT;