use strict; use Data::Dumper; use Carp; my %hold; while ( ) { chomp; next if (/^\#/); my @elem = split(/\t/,$_); # Keep in Hash of Array # HoA here consumes so much memory push @{$hold{$elem[0]}}, $elem[1]; } # is there a better way to keep/process the array # other than HoA like %hold ? foreach my $key ( sort keys %hold ) { my @ary = @{$hold{$key}}; # then I will process @ary for each key above print "$key\n"; } # in practice there are ~4-5Gb of such lines below __DATA__ #Tags Error_Rate_In_ASCII AATACGGCCACCCCCCCCCCCCCCGCCCCTCCCC INILILFIIIIQNQQNQNLLKFKNCDHA?DAHHH CTTTCCCTCCACGACGCTCTTCCGCTCTCATGAT QQIQQQQQIQQQIQQLQNQNOPNKIHHHAHHAAA TCCACTCTTTCCCTACACGACGCTCTTCCGATCT QFQFQQQQQQQQQQQQIQLFNNPONHHHHHDHHH TCCCCTCTTTCCCTACACGACGCTCTTCCGATCT UIUIUUUUUUUUUULUUUIOUKUNULLLLKKLLK TGATACGGCGACCACCGAGATCATCACACTTTCC UUUUUUUUUUUUUQUUTUUUUULLUKRHPKIHHO TGATACGGCGACCACCGAGATCTACACTCTTTCC UOIUIUUUUUUUUIUUUOUOUUUUUKLLLLIKKL TGATACGGCGACCACCGAGATCTACACTCTTTCC UUUUMUUUUUUUUIUUIUUQUUUUUOOOOOOOOO TGATACGGCGACCACCGAGATCTACACTCTTTCC UUUUUUUUUUUUUUUUUTUUUUUUURRRRRMPPQ TGATACGGCGACCACCGAGATCTACACTCTTTCC UUUUUUUUUUUUUUUUUUUUUUTUURRPRRIMQQ TGATACGGCGACCACCGAGCTCTACACTCTTTCC UUQUUUUUUUMUUUUUUQUUUUUUUOOOOOIOOO AATTCTGCGCCCCCCCCACTCAGCCCCCCTCCCC LFNFQNQNFLQLIQQLIIQNOCIIIAAAAAHHHA AGATACGGCCACCACCGAGATCTACACTCTCTCC NFQNIQLFQIFNQNQQFQQNNKKINAHAHH?AHD TGATACGGCGACCACCGCGATCTACACTCTCTCC UUUUUUUUUUUUUUUUTLUUQUUCUPRRRRHRNQ TGATCCGGCGACCCCCGAGCTCTACACTCTTTCC QQQQIQQIQQQQQNQQQQQLOOKNPHHHHHHDHH TGCTCCGGCGACCACCGAGATCTACACTCTTTCC QQIQFQQNQQQQQIQQQLQLNOKIOHHHHHADHH TGCTCCGGCGACCACCGAGATCTACACTCTTTCC UIOUOULOUUUUUOUUUOUUUUUUULLKLLIGLL TGCTCCGGCGACCACCGAGATCTACACTCTTTCC ULOUIUOUUUUUUUUUULUUUUUUULLLLLIGLL GTCTCCTGCGACCCCCGAGCTCTACACTCTTTCC QLLQIQIFQNQQQIQQNQNLOONNOHHHHHHHHH TTCTCCTTCGACCACCGAGATCTACACTCTTTCC QLNQIQLIQINQQQQQQLQQOPONOHHHHHHHHH TTCTCCTTCGACCACCGAGATCTACACTCTTTCC UOUUIUOIUILUUUUUULUUUUUUULLLLLKLLL