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:
- Quando o awk precisa ser interpretado como um comando?
- Quando awk é um programa?
- Há um problema ao chamar meu primeiro exemplo como um
awk
comando?
Algo como:
awk '{print $2}' file.txt | awk '{FS=" "} {print 4}'
significa que awk
os programas podem se comunicar usando pipes?
Responder1
awk
tem 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 -f
opçã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 -c
opçã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, awk
os 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 AWK
linguagem 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 -f
a opção, poderá considerar dois de seus exemplos como programa awk.