2012-02-18 4 views
16

Estoy tratando de aprender a usar awk pero no me está comportando como esperaba. Aquí está mi problema:¿Por qué awk imprime toda la línea en lugar del primer campo?

$ echo "Hello brave new world" | awk "{print $1}" 
Hello brave new world 

esperaba ver "Hola", ya que este es el primer campo. ¿Por qué los espacios no cuentan como delimitadores de campo?

+4

Por lo tanto, ha aprendido más sobre programación de shell que la programación de Awk; las respuestas hasta ahora son acertadas. Siempre use comillas simples alrededor de las secuencias de comandos, a menos que haya razones extremadamente convincentes para hacerlo de otra manera. –

Respuesta

26

Se debe a que Bash interpreta que $1 hace referencia al primer argumento de shell, por lo que lo reemplaza por su valor. Dado que, en su caso, ese parámetro no está configurado, $1 se reemplaza con la cadena vacía; entonces su programa AWK es realmente {print }, que imprime toda la línea.

Para evitar Bash de hacer esto, envuelva su programa AWK en comillas simples en lugar de comillas dobles:

echo "Hello brave new world" | awk '{print $1}' 

o

echo 'Hello brave new world' | awk '{print $1}' 
7
echo "Hello brave new world" | awk '{print $1}' 

utilizar comillas simples alrededor del programa awk , de lo contrario $ 1 se traduce como la variable de shell $ 1

Cuestiones relacionadas