Seu código:
awk '{if ($2 == q) print $1; else print$2 }' input_file
Isso imprimirá $1 se $2 for igual à awk variable q . Essa variável não é inicializada, portanto, o teste provavelmente nunca será verdadeiro, a menos que você defina q como a sequência "q" na linha de comando:
awk -vq="q" '{if ($2 == q) print $1; else print $2 }'
O que você provavelmente quer é comparar com "q" no próprio código:
awk '{if ($2 == "q") print $1; else print $2 }' input_file
Ou, de uma maneira mais idiomática de dizer a mesma coisa:
awk '$2 == "q" { print $1 } $2 != "q" { print $2 }'
ou
awk '$2 == "q" { print $1; next } { print $2 }'
ou, como mostra a solução da RomanPerekhrest , usando o operador ternário ?: .