Outro ponto para adicionar às duas respostas anteriores. Existe uma segunda maneira de passar variáveis, adicionando-as à linha de comando depois que o programa foi especificado.
awk program.awk /path/to/input var=value second/input
Do manual do GNU Awk
The distinction between file name arguments and variable-assignment
arguments is made when awk is about to open the next input file. At
that point in execution, it checks the file name to see whether it is
really a variable assignment; if so, awk sets the variable instead of
reading a file.
Therefore, the variables actually receive the given values after all
previously specified files have been read. In particular, the values
of variables assigned in this fashion are not available inside a BEGIN
rule (see BEGIN/END), because such rules are run before awk begins
scanning the argument list.
Então, enquanto
awk -v var=value program.awk
permite que você passe valores para o início do programa, antes de qualquer parte BEGIN, você também pode alterar as variáveis do programa, se for necessário.