Passa variável do awk para o bash

0

Como posso passar uma variável de awk para bash? Eu quero passar muita variável, então eu não uso:

x=$(awk '.....)

Acho que não é útil.

    
por diego9403 31.08.2015 / 16:25

2 respostas

1

Assumindo que você confie nos dados recebidos que o awk está processando.

Você pode ter o awk imprimindo declarações de variáveis do shell, e source a saída do awk como se fosse um arquivo shell:

source <(
    awk '
        # ....
        print "var1=" value1
        print "var2=" value2
        # ....
    ' input
)
echo "shell var1 = $var1"
echo "shell var2 = $var2"
    
por 31.08.2015 / 16:37
0

Este é um problema geral que já apareceu em muitas variantes no StackExchange, por exemplo

A resposta é sempre que não é possível para um processo alterar o ambiente de seu pai (e é isso que você está tentando alcançar quando você pedia a awk para definir uma variável de ambiente no shell que o gerou ).

A solução recomendada geralmente é a fonte da saída, como Glenn mostrou. Você tem que confiar no programa, no entanto. Você está basicamente executando código arbitrário.

Outra solução, ligeiramente diferente, seria a saída das linhas var=value para um arquivo nomeado e a origem desse arquivo. (O sourcing basicamente executa o conteúdo de um arquivo no shell atual, como se você os tivesse digitado; consulte o link .) A vantagem dessa abordagem é que você pode verificar o conteúdo deste arquivo antes de obtê-lo.

    
por 01.09.2015 / 13:51

Tags