open (FILE1, "<", "filein.txt") || die "$!"; open (FILE2, ">", "fileout.out") || die "$!"; my $counter; while(){ m/.+,.+,\d+,(\d+)_.+/; $counter->{$1}++ ; print FILE2 "$counter->{$1},$_"; } close FILE1; close FILE2; result would be : 1,WG0045068-DNA,A01,0,102186_A01_WTCCCT519791,... 2,WG0045068-DNA,B01,0,102186_B01_WTCCCT519793,... 3,WG0045068-DNA,C01,0,102186_C01_WTCCCT519805,... 1,WG0045068-DNA,A01,0,102187_A01_WTCCCT519791,... 1,WG0045068-DNA,B01,0,102188_B01_WTCCCT519793,... 2,WG0045068-DNA,C01,0,102187_C01_WTCCCT519805,... 3,WG0045068-DNA,A01,0,102187_A01_WTCCCT519791,... 2,WG0045068-DNA,B01,0,102188_B01_WTCCCT519793,... 4,WG0045068-DNA,C01,0,102186_C11_WTCCCT519805,... not sorted, but sorting should not be a problem :)