#!/usr/bin/env perl -l use strict; use warnings; use autodie; use constant { UNIQ => 0, CODE => 2, JOINER => ':', }; my %data; while () { my @cols = split; if (exists $data{$cols[UNIQ]}) { $data{$cols[UNIQ]}->[CODE] .= JOINER . $cols[CODE]; } else { $data{$cols[UNIQ]} = [ @cols ]; } } print "@{$data{$_}}" for sort keys %data; __DATA__ A1 text1 NY Jan 01 A2 text2 LN Feb 02 A3 text3 SG Mar 03 A2 text2 NY Feb 02 A1 text1 SG Jan 01 A1 text1 AUS Jan 01 #### A1 text1 NY:SG:AUS Jan 01 A2 text2 LN:NY Feb 02 A3 text3 SG Mar 03