Awk no funciona cuando está entre comillas dobles

11

Este comando no funciona:

ssh $HOST "ls -l | awk '{print $1}'"`

Arriba ignora el comando awk. Creo que podría ser debido a las comillas dobles?

Además, ¿cómo agregaría otro conjunto de comillas dobles dentro del awk?

es decir:

ssh $HOST "awk '{print $1 "*"}' /some_file"

Intenté escapar de las comillas, incluso intenté esto:

ssh $HOST "awk '{print $1 "\""*"\""}' /some_file"

sin éxito.

Mella
fuente

Respuestas:

19

La interpolación variable se realiza entre comillas dobles, así que esto es lo que creo que podría estar sucediendo: cuando escribe ssh $HOST "ls -l | awk '{print $1}'", su shell (el que está en su computadora local, donde está ejecutando el cliente SSH) ve $1dentro de las comillas dobles y lo reemplaza con el valor de la variable $1, que estará en blanco. No puede detectar que $1está anidado entre comillas simples dentro de las comillas dobles. Entonces, lo que termina siendo enviado al servidor remoto es

ls -l | awk '{print }'

que es básicamente equivalente a

ls -l | cat

es decir, solo imprime la salida de ls -l.

Solución: escapar $con una barra invertida,

ssh $HOST "ls -l | awk '{print \$1}'"
David Z
fuente
Jaja, eso fue muy simple! ¡Lo acabo de mirar! Esto hizo exactamente lo que quería. ssh $ HOST "ls -l | awk '{print \ $ 1 \" * \ "}'" ¡Muchas gracias!
Nick