Isso não é awk code, isso é csh code. Mude a she-bang para
#! /bin/csh -f
if($1 == "x") cat file
(onde -f não é pegar um arquivo como argumento como em awk , mas não ler o usuário ~/.cshrc )
O código awk para fazer a mesma coisa seria algo como:
#! /usr/bin/awk -f
BEGIN {
if (ARGV[1] == "x") exit(system("cat file"))
}
Se por versão tradicional do awk , você quer dizer as versões pré-1985 não-POSIX como /bin/awk do Solaris, então isso não pode ser feito, já que elas não têm ARGV e não pode se referir a seus argumentos (diferente de FILENAME ao processar seus argumentos como arquivos de entrada). No Solaris, você deseja usar /usr/xpg4/bin/awk para obter algo próximo a um awk padrão. O texto da sua mensagem de erro sugere que você está usando mawk , o que geralmente não é o que chamamos de versão tradicional de awk e suporta essa sintaxe.
Agora, observe que system() na verdade chamaria sh para interpretar essa linha de comando cat file shell, então você pode fazer a coisa toda em sh (o que seria muito melhor do que csh que realmente não deveria ser usado neste século):
#! /bin/sh -
if [ "$1" = x ]; then
cat file
fi
¹, também, alguns argumentos começando com - seriam tomados como opção por awk ! Com o GNU awk , você pode usar um #! /usr/bin/gawk -E she-bang para resolver isso.