Em vez de testes de expressões regulares, eu sugeriria comparações de strings para as strings e comparações numéricas para os valores numéricos, por exemplo
$2 == "exonic"
e
$4+0 < 1
(o +0
força a comparação numérica em vez de lexical). Além disso, é só uma questão de acertar a lógica:
$ awk -F'\t' '$2 == "exonic" && $3 == "nonsynonymous SNV" && ($4+0 < 1 || $4 == ".") && ($5+0 < 1 || $5 == ".") && ($7+0 < 1 || $7 == ".")' inputfile.txt
chr2 exonic nonsynonymous SNV 0.246 . rs2022 0.4061
chr2 exonic nonsynonymous SNV 0.6131 0.7376 rs227 0.7167