cat test 1;2; 3; 4; 5 ; 5 2;2;4; 4; 6; 7 3;1;2; 3;4;5 4;1;1;1;1; 1 #### 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' ] };