perl -MData::Dumper -le 'my %hash; while(<>) { my ($field1,$field4)=(split /\s*;\s*/)[0,3]; push @{$hash{$field4}},$field1 } print Dumper(\%hash) ' test $VAR1 = { '1' => [ '4' ], '4' => [ '1', '2' ], '3' => [ '3' ] };