2011-08-30 15 views
23

Tengo un comando que funciona bien en la línea de comandos, pero no cuando trato de ponerlo en un alias o función.Usando awk en BASH alias o función

$ awk '{print $1}' /tmp/textfile 
0 

Correcto, ya que '0' está en la posición 1 de "archivo de texto".

$ alias a="awk '{print $1}' /tmp/textfile" 
$ a 
1 0 136 94 

Esa es toda la línea en "archivo de texto". Probé todas las variedades de comillas, paréntesis y marcadores que podría imaginar que funcionen. Puedo obtener el mismo problema en una amplia variedad de formatos.

¿Qué no entiendo?

Respuesta

40

tiene que escapar del $ así:

alias a="awk '{print \$1}' /tmp/textfile" 

De lo contrario su alias es:

awk '{print }' /tmp/textfile 

que imprime todo el archivo ...

+1

AH-HA! Duh! ¡Gracias! –

+6

El protocolo para agradecer en estas partes es marcar la respuesta como la correcta (haciendo clic en la pequeña marca de verificación a la izquierda). =) – Costa

+3

+1 Si fuera el dueño de esta pregunta, con gusto marcaría esta como la respuesta. Resolvió un problema similar que estaba teniendo. – K4GDW

11

utilizar una función en lugar de alias

myfunc(){ awk '{print $1}' file; } 
+0

Esta es ciertamente la solución más flexible, ya que permite referenciar el vector argumento. Si, por ejemplo, desea utilizar '' $ {1: -difilo_de_fichero_hardificado} "' para permitir que se pase un nombre de archivo opcional con un valor predeterminado explícito, eso funcionará aquí pero no en el enfoque de alias. –