Posso obter argumentos que sejam opções do AWK transmitidos diretamente para um script AWK puro?
Roteiro de exemplo:
#!/usr/bin/env -S awk -f
BEGIN { if (ARGV[1] == "-h") print "whoop" }
Eu quero ./myscript -h
imprimir opa. Mas o AWK obtém o -h primeiro e, em vez disso, imprime seu uso.
Correr ./myscript -- -h
funciona, mas não consigo - trabalhar no shebang por causa do -f.
Eu sei que poderia usar um script de shell com AWK.
Responder1
Para o bem do desafio, isso poderia ser feito com o FreeBSDenv
ou com GNUambiente>= 8,30 (já assumido pelo OP) em um shebang:
#! /usr/bin/env -S sh -c 'exec awk -f "$0" -- "$@"'
BEGIN { for(i = 1; i < ARGC; i++) print ARGV[i] }
./myscript -h 1 2 3
-h
1
2
3
Isso não significa que seja uma boa ideia.
Você poderia tentar isso:
#! /bin/sh
BEGIN { 2>"/dev/null"
exec awk -f "$0" "--" "$@"
}
BEGIN { for(i = 1; i < ARGC; i++) print ARGV[i] }
Isso pressupõe que você não tenha um BEGIN
comando no seu arquivo PATH
.
Responder2
Se você tem GNU awk
você pode usar isso
#!/usr/bin/gawk --exec
BEGIN { print "==>",ARGV[1],"<==" }
Uso de amostra
./a -h
==> -h <==
Não testei, mas a mawk
variante parece usar -W exec
em vez de --exec
. O GNU gawk
afirma apoiar isso também, mas não funciona com arquivos #!
.