Mon 0100 Mon 0700 Tue 0700 Wen 0100 Wen 0700 Thu 0100 Thu 0700 Fri 0100 Fri 0700 Sat 0100 Sun 0100 Sun 0700 #### Mon Tue Wen Thu Fri Sat Sun 0100 X X X X X X 0700 X X X X X X #### perl -lane ' $h{$F[0]}++ or push @days, $F[0]; $h{$F[1]}++ or push @time, $F[1]; $data{$F[0],$F[1]}++ }{ print "\t\t", join "\t", @days; for $t (@time) { print $t, "\t\t", join "\t", map { $data{$_,$t} ? "X" : " " } @days; } ' file #### perl -ane ' $h{$F[0]}++ or push @days, $F[0]; $h{$F[1]}++ or push @time, $F[1]; $data{$F[0],$F[1]}++ }{ print "\t\t", join "\t", @days; print "\n"; print for join "\t", map { $t = $_ ; (map { $data{$_,$t} ? "X" : " " } @days) } @time; ' file