Por que o AWK não gosta de pontos em uma das duas substituições?

3

Estou tentando usar o AWK em um script bash para procurar uma string de espaço reservado em um arquivo de modelo e substituí-lo pelo conteúdo de uma variável que (pode) conter vários caracteres especiais.

Exemplo:

awk -v SOURCEIP="$SOURCEIP" REVERSEDNS="$REVERSEDNS" '{
   gsub(/^_TMPSOURCEIP_/, SOURCEIP);
   gsub(/^_TMPREVERSEDNS_/, REVERSEDNS);
   print
}' /home/foo/footemplate

Quando eu tento isso e depuro, recebo este erro:

+ awk -v SOURCEIP=1.1.1.1 REVERSEDNS=nz32-cm1.foo.blah.example.com '{
   gsub(/^_TMPSOURCEIP_/, SOURCEIP);
   gsub(/^_TMPREVERSEDNS_/, REVERSEDNS);
   print
}' /home/foo/footemplate
awk: REVERSEDNS=nz32-cm1.foo.blah.example.com
awk:                    ^ syntax error

Eu deduzi da seta que o awk não gosta do ponto na variável REVERSEDNS ... mas se fosse esse o caso, por que estaria tudo bem com pontos no endereço IP?

    
por Mike B 06.02.2014 / 06:20

1 resposta

4

É porque falta um segundo -v :

awk -v SOURCEIP="$SOURCEIP" -v REVERSEDNS="$REVERSEDNS" '{
   gsub(/^_TMPSOURCEIP_/, SOURCEIP);
   gsub(/^_TMPREVERSEDNS_/, REVERSEDNS);
   print
}' /home/foo/footemplate

-v precisa estar presente para cada variável que você asseverar. A razão pela qual ele coloca o erro no ponto é porque este é o lugar no qual o awk tem certeza de que você escreveu uma sintaxe inválida.

    
por 06.02.2014 / 06:27