Há alguns problemas, acho
Primeiro, até onde eu sei, os argumentos da linha de comando não estão disponíveis como $1 e $2 dentro do bloco BEGIN . No entanto, pelo menos no GNU awk, você pode acessá-los através do array ARGV (embora eles precisem estar separados por espaços em branco e não separados por vírgula).
Em segundo lugar, a sintaxe para remover a referência de variáveis internas é apenas num1 não $num1 .
Então você poderia fazer
#!/usr/bin/awk -f
function add(num1,num2)
{
print num1 + num2
}
BEGIN {
add(ARGV[1],ARGV[2])
}
e depois chamá-lo como
$ ./add.awk 5 6
11
Se você realmente quiser usar ./add.awk 5,6 , precisará dividir ARGV[1] em uma matriz internamente, por exemplo
#!/usr/bin/awk -f
function add(num1,num2)
{
print num1 + num2
}
BEGIN {
split(ARGV[1],a,",");
add(a[1],a[2])
}
$ ./add.awk 5,6
11