Então ... o formato de um programa awk
é uma série de instruções EXPRESSION {
ACTION }
. Se você omitir a parte ACTION
, ela assumirá
print
, e se você omitir o EXPRESSION
, ele corresponderá a tudo. assim
isso imprime tudo:
awk 1
Porque sua expressão ( 1
) é avaliada como "true" (e você não tem ação).
Isto é verdade para todos os exemplos "x-does-print", dado que
sua entrada de amostra todos eles têm um não zero e não nulo EXPRESSION
e não
%código%. Dada uma linha de entrada vazia, ACTION
no segundo exemplo não
saída de qualquer coisa.
Da mesma forma, seus exemplos de "nada" além do primeiro têm
uma expressão que é avaliada como "false" (uma string vazia ou
numérico 0). O exemplo $0
funciona de maneira diferente: imprime
nada porque não tem instruções de impressão. Dado um
linha de entrada longa com pelo menos 999 campos, o segundo exemplo ( {$0="abc"}
)
iria de fato imprimir a linha.
Isso é fundamental para como o $999
opera. Então, com certeza, está documentado
e não vai quebrar.
Observe que seus exemplos de "travamentos" não ocorrem de fato; você acabou de
cometeu um erro básico na sintaxe da sua shell. O awk interpreta argumentos
começando com awk
como opções de linha de comando. Citando eles não
mude qualquer coisa. Se você quiser passar números negativos assim,
você precisa prefixar seu programa awk com -
para indicar ao awk que
deve parar as opções de processamento:
echo 'crashes' | awk -- -3.14159
Imprimirá "falhas", pois --
não é uma string vazia nem
numérico 0.