Quando interpretar o awk como um comando ou uma linguagem de programação?

Quando interpretar o awk como um comando ou uma linguagem de programação?

Eu sei que awké uma linguagem de programação de script, mas às vezes fico confuso quando interpreto como comando ou como programa.

Por exemplo. 1-Aqui eu interpreto como um comando:

awk '{print $2}' file.txt

Por exemplo. 2-Aqui eu interpreto como um programa awk:

awk 'BEGIN      {skip = 0} \
        skip == 0  {if (NF == 0) 
                     {skip = 1}  \
                    else 
                     {print};  \
                    next} \
        skip == 1  {print; \
                    skip = 0; \
                    next}'

Tirado deaqui.

As perguntas são:

  1. Quando o awk precisa ser interpretado como um comando?
  2. Quando awk é um programa?
  3. Há um problema ao chamar meu primeiro exemplo como um awkcomando?

Algo como:

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

significa que awkos programas podem se comunicar usando pipes?

Responder1

awktem dois modos de invocação, um com um texto de programa na linha de comando e outro com um programa de um arquivo. Isto é afirmado na sinopse da página de manual do awk (esta do mawk no 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 ...]

Chamar o primeiro formulário de programa ou não depende da definição do programa que você deseja usar. Eu diria que ambas as formas envolvem programas, sendo que na primeira o programa é especificado como um argumento de linha de comando. Ambos os seus exemplos são da primeira forma, pois nenhum deles envolve a -fopção. O fato de o segundo exemplo ter um argumento de linha de comando multilinha é, com relação a isso, irrelevante.

Isso não é exclusivo de awk. por exemplo, python por padrão interpreta um argumento de linha de comando como um nome de programa, mas com a -copção permite que você especifique um programa na linha de comando (ou seja, o padrão é o contrário de awk).

Independente disso está a comunicação por meio de pipes. Isso é resolvido pela sintaxe do shell e pelo sistema operacional, a única coisa que seu script precisa fazer é escrever em stdout, reps. leia de stdin. Então, sim, awkos programas podem se comunicar por meio de pipes.

Responder2

A rigor, quando você ligaestranho, você se refere ao intérprete, não ao idioma. A linguagem é chamadaAWK.

awk(ou mawk, nawk) é apenas um utilitário que executará programas escritos em AWKlinguagem de programação.

Conforme definido pelo POSIX,programa estranhoé:

programa

Se nenhuma opção -f for especificada, o primeiro operando para awk será o texto do programa awk. A aplicação deve fornecer o operando do programa como um único argumento para awk. Se o texto não terminar em a , o awk interpretará o texto como se terminasse.

Portanto, se você não usar -fa opção, poderá considerar dois de seus exemplos como programa awk.

informação relacionada