Função para adicionar dois números no awk

2

Eu tenho um arquivo awk add.awk que contém uma função add(num1,num2) . Eu quero pegar a entrada da linha de comando.

#!/bin/awk -f
function add(num1,num2)
{
    print $num1 + $num2
}
BEGIN {
    add($1,$2)
}

Mas quando eu tento executar o arquivo add.awk usando o seguinte comando:

./add.awk 5,6

sempre imprime o valor 0.

Existe algum problema com a maneira como estou especificando a entrada?

    
por user4260074 20.08.2016 / 19:34

2 respostas

6

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
    
por 20.08.2016 / 21:39
4

o awk está lendo o fluxo de entrada, mas como não há nada, imprima 0.
Para dar entrada ao seu script, você pode usar:

echo 5 6 | awk  '{ print $1 + $2}'
    
por 20.08.2016 / 21:39

Tags