Olá Cyro,
já vi vc agradecer às respostas que recebeu e isso significa que seu problema está resolvido, porém só pra que vc entenda o que houve, vou te dar uma explicação.
Como vc sabe, as variáveis do Shell são precedidas por um $ e as do awk, por ser outra linguagem e com outra sintaxe, não usa este $. Então para que o seu exemplo que funcionava com uma constante, continuasse funcionando com uma variável, bastava que vc exibisse-a ao shell para que ele substituísse-a por seu valor antes da execução do awk. Usando o exemplo do Casanova:
$ cat ramal
abc;6166;def;teste;
abc;6165;def;teste;
abc;6167;def;teste;
abc;6168;def;teste;
essa;tem;6166;teste;
essa;nao;tem;6166;fim;
essa;tem;6167;teste;
essa;nao;tem;6168;fim;
essa;tem;6168;teste;
essa;nao;tem;6168;fim;
essa;tem;6169;teste;
essa;nao;tem;6169;fim;
$ awk -F";" '{ if ($3 ~ /6166/) print }' ramal # O seu exemplo que funciona
essa;tem;6166;teste;
$ Num=6166
$ awk -F";" '{ if ($3 ~ /'$Num'/) print }' ramal # Seu exemplo funcionando com variável do Shell
essa;tem;6166;teste;
Repare que fechei os apóstrofos antes de $Num e abri-os novamente logo após, deixando o $Num sem proteção para que o Shell a expandisse, trocando-a por seu valor.