Quando você envia algo para um script, o script será executado apenas uma vez. Então, por exemplo, se você fizer:
foo | bar
então bar
é chamado apenas uma vez, com seu STDIN sendo o que foo
escreveu para STDOUT.
Você tem um uso inútil de cat
, já que você pode fazer:
awk -f my_awk < my_file
Ou, como awk
pode trabalhar diretamente com argumentos de nome de arquivo:
awk -f my_awk my_file
Se você for mais longe, awk
em si é uma ferramenta que funciona linha a linha, mas é realmente chamada apenas uma vez pelo shell. De este tutorial :
Like most UNIX utilities, AWK is line oriented. That is, the pattern specifies a test that is performed with each line read as input.