Sé que awk
es un lenguaje de programación script, pero a veces me confundo cuando lo interpreto como comando o como programa.
P.ej. 1-Aquí lo interpreto como un comando.:
awk '{print $2}' file.txt
P.ej. 2-Aquí lo interpreto como un programa awk.:
awk 'BEGIN {skip = 0} \
skip == 0 {if (NF == 0)
{skip = 1} \
else
{print}; \
next} \
skip == 1 {print; \
skip = 0; \
next}'
Tomado deaquí.
Las preguntas son:
- ¿Cuándo es necesario interpretar awk como un comando?
- ¿Cuándo awk es un programa?
- ¿Hay un problema al llamar a mi primer ejemplo como
awk
comando?
Algo como:
awk '{print $2}' file.txt | awk '{FS=" "} {print 4}'
¿Significa que awk
los programas pueden comunicarse mediante tuberías?
Respuesta1
awk
Tiene dos modos de invocación, uno es con un texto de programa en la línea de comando y el otro con un programa desde un archivo. Esto se indica en la sinopsis de la página de manual de awk (ésta de mawk en Ubuntu 12.04):
mawk [-W option] [-F value] [-v var=value] [--] 'program text' [file
...]
mawk [-W option] [-F value] [-v var=value] [-f program-file] [--]
[file ...]
Llamar o no un programa a la primera forma depende de la definición del programa que desee utilizar. Yo diría que ambas formas involucran programas, mientras que en la primera el programa se especifica como un argumento de línea de comando. Ambos ejemplos son de la primera forma, ya que ninguno implica la -f
opción. Que el segundo ejemplo tenga un argumento de línea de comando multilínea es, con respecto a esto, irrelevante.
Esto no es exclusivo de awk
. Por ejemplo, Python interpreta de forma predeterminada un argumento de línea de comando como un nombre de programa, pero con la -c
opción le permite especificar un programa en la línea de comando (es decir, el valor predeterminado es al revés awk
).
Independiente de eso es la comunicación mediante tuberías. De eso se encarga la sintaxis del shell y el sistema operativo, lo único que debe hacer su script es escribir en stdout, reps. leer desde la entrada estándar. Entonces sí, awk
los programas pueden comunicarse a través de tuberías.
Respuesta2
Estrictamente hablando, cuando llamasawk, te refieres al intérprete, no al idioma. El idioma se llamaAWK.
awk
(o mawk
, nawk
) es solo una utilidad que ejecutará programas escritos en AWK
lenguaje de programación.
Como se define POSIX,programa awkes:
programa
Si no se especifica la opción -f, el primer operando de awk será el texto del programa awk. La aplicación proporcionará el operando del programa como argumento único para awk. Si el texto no termina en , awk interpretará el texto como si así fuera.
Entonces, si no usa -f
la opción, puede considerar dos de sus ejemplos como programa awk.