¿Cuándo interpretar awk como un comando o un lenguaje de programación?

¿Cuándo interpretar awk como un comando o un lenguaje de programación?

Sé que awkes 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:

  1. ¿Cuándo es necesario interpretar awk como un comando?
  2. ¿Cuándo awk es un programa?
  3. ¿Hay un problema al llamar a mi primer ejemplo como awkcomando?

Algo como:

awk '{print $2}' file.txt | awk '{FS=" "} {print 4}'

¿Significa que awklos programas pueden comunicarse mediante tuberías?

Respuesta1

awkTiene 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 -fopció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 -copció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í, awklos 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 AWKlenguaje 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 -fla opción, puede considerar dos de sus ejemplos como programa awk.

información relacionada