awk: as colunas não são impressas quando as cadeias de concatenação são passadas como uma cadeia de comandos

1

Encontrei alguma anomalia ao escrever um script.

Os exemplos a seguir funcionam conforme o esperado:

$ echo 123 | awk '{print $1 456}'
123456
$ sh -c "echo 123 | awk '{print $1}'"
123

Mas o seguinte exemplo não:

$ sh -c "echo 123 | awk '{print $1 456}'"
456

Espero imprimir a primeira coluna com a string adicional, que deve retornar 123456 , como ocorre ao executar o mesmo comando sem sh -c . Mas o que está acontecendo, a primeira coluna é ignorada por algum motivo. O que é interessante, $1 é impresso sem problemas quando não está executando a concatenação de strings.

Por que isso está acontecendo e como fazer a concatenação de strings dentro do comando que é passado para uma instância separada do shell?

    
por kenorb 29.08.2014 / 12:35

1 resposta

3

Você deve escapar o sinal $ :

$ sh -c "echo 123 | awk '{print \ 456}'"
123456

Caso contrário, $1 é expandido pelo shell atual.

    
por 29.08.2014 / 12:40

Tags