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