Seu teste $2 ~ /./
é sempre verdadeiro, exceto quando $2
é a string vazia, ou seja, quando há 0 ou 1 campo na linha. Você deve tentar $2 ~ /^.$/
.
Você também pode combinar o grep e o awk em um:
awk '/^.M/ {print ($2 ~ /^.$/ ? $3 : $2)}'