awk
tem modos de chamada de reboque, 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 man awk (esta do mawk on Ubunut 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 ...]
O fato de chamar ou não o primeiro formulário de um programa depende da definição de programa que você deseja usar. Eu diria que ambas as formas envolvem programas, sendo que no primeiro o programa é especificado como um argumento de linha de comando. Ambos os seus exemplos são da primeira forma, já que nenhum deles envolve a opção -f
. Que o segundo exemplo tenha 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 opção -c
permite que você especifique um programa na linha de comando (ou seja, o padrão é o contrário de awk
).
Independente disso é a comunicação usando pipes. Isso é feito pela sintaxe do shell e pelo sistema operacional, a única coisa que seu script precisa fazer é gravar em stdout, reps. leia de stdin. Então, sim, awk
programas podem se comunicar por canos.