perl -MO=Deparse -MData::Dump -F"\|\s?" -lane "$.==1?next:push@{$h{eval$F[0]=~tr/\s//r}},$F[1]}{dd%h" columndata.txt BEGIN { $/ = "\n"; $\ = "\n"; } use Data::Dump; LINE: while (defined($_ = readline ARGV)) { chomp $_; our @F = split(/\|\s?/, $_, 0); $. == 1 ? next : push(@{$h{eval $F[0] =~ tr/s//r};}, $F[1]); } { dd(%h); } -e syntax OK