On Saturday 16 Apr 2011 09:06:02 Gurunath Katagi wrote: > hi .. i am new to perl .. > i have a input file something pasted as below .. > > 16 50 > 16 30 > 16 23 > 17 88 > 17 99 > 18 89 > 18 1 > .. > -- > > and i want the output something like this : > 16 50 30 23 > 17 88 99 > 18 99 1 > > i.e for each values in the first column, i want the elements in the second > column to be a one row .. > > can be anybody give me psuedocode , to how to go about this .. > thank you
This should work (tested): Regards, Shlomi Fish ----------------------------- SNIP ------------------------ #!/usr/bin/perl use strict; use warnings; my $filename = shift(@ARGV); open my $in_fh, '<', $filename or die "Cannot open '$filename' for reading"; my $last_key = undef; my @values; sub print_line { print $last_key, ' ', join(' ', @values), "\n"; return; } while (my $line = <$in_fh>) { chomp($line); my ($new_key, $new_value) = split(/\s+/, $line); if ( ( !defined($last_key) ) or ($last_key eq $new_key)) { push @values, $new_value; } else { print_line(); @values = ($new_value); } $last_key = $new_key; } print_line(); close ($in_fh); -- ----------------------------------------------------------------- Shlomi Fish http://www.shlomifish.org/ My Favourite FOSS - http://www.shlomifish.org/open-source/favourite/ "We're not doing it for money… we're doing it for a shitload of money!" -- Spaceballs, http://www.imdb.com/title/tt0094012/ Please reply to list if it's a mailing list post - http://shlom.in/reply . -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/