use warnings; use strict; use constant kMaxCol => 7; # print header printf "%5s ", $_ for 1 .. kMaxCol; print "\n"; # Process data while () { chomp; next unless length; my @cols = split (/\s+/, $_); my @sorted; @cols = map {[(m/(\d+)p/i ? $1 - 1 : kMaxCol), $_]} @cols; # Generate indexes $sorted[$_->[0]] = $_->[1] for grep {$_->[0] >= 0 && $_->[0] < kMaxCol} @cols; $sorted[$_] ||= '' for 0 .. kMaxCol - 1; printf " %7s", $_ for @sorted; print "\n"; } __DATA__ c1p110 c2p452 9p235 8p226 5p100 6p218 c1p278 2p397 c6p280 7p273 3p409