linha 1: erro de sintaxe em ou próximo se

0

Meu código em treat.awk é:

#!/usr/bin/awk -f
if($1 == "x") cat file

E minha entrada no prompt de comando é:

~/home/treat.awk x

Aparece uma mensagem de erro como:

line 1: syntax error at or near if

Como consertar isso? Eu estou usando o awk para este código e somente a versão tradicional do awk é permitida.
O arquivo contém apenas " teste ".

    
por nerf 19.06.2018 / 14:01

1 resposta

5

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.

    
por 19.06.2018 / 14:07

Tags