Ou outra abordagem com a menor diferença do seu exemplo:
#!/bin/bash
while read -r column1 column2 column3; do
if [ -z "$column2" ] ; then
printf '%s\n' "Only first column has data"
elif [ -z "$column3" ]; then
printf '%s\n' "Only first and second columns has data"
elif [ -n "$column3" ]; then
printf '%s\n' "All three columns has data"
fi
done < file.txt
A saída será:
All three columns has data
Only first and second columns has data
Only first column has data
Notas :
No seu exemplo, a primeira e a segunda linhas contêm vários espaços no final, mas, por padrão, read
remove todos os caracteres iniciais e finais do espaço.
Se a sua entrada contiver mais de 3 colunas, todos os dados na terceira coluna serão colocados em column3
Veja Como posso ler um arquivo (fluxo de dados, variável) linha a linha (e / ou campo a campo )?