Dada a informação na pergunta que posso apresentar:
awk '{for (i=1; i<NF; i++){ a[i]+=$i; b[i]=b[i]" " $i}} END{for (i=1; i<NF; i++) if (a[i]/NR!=9) {printf "%s\n", b[i]}}' same-column-values
Quando a função percorre o arquivo, calcula a soma na variável 'a' e acrescenta o valor a uma matriz de índice 'b'. Depois que o arquivo é completamente lido, o array de somas é iterado e se a soma dividida pelo número de registros (NR) não for igual a 9 do que a linha correspondente no array 'b' é impressa.
Isso me dá uma saída de
1 2 5
5 5 9
8 7 7
3 4 4
5 2 1
5 7 5
7 6 7
6 3 9
O inconveniente é que o resultado deve ser lido em cima- > em baixo e deve ser traduzido de cima para baixo e para a esquerda e para a direita.
Como alternativa, você pode obter uma lista de colunas que contém apenas valores de 9 com o seguinte comando:
awk '{for (i=1; i<NF; i++){ a[i]+=$i; b[i]=b[i]" " $i}} END{for (i=1; i<NF; i++) if (a[i]/NR==9){print i; }}' same-column-values