Invocando um script, que tem um shebang awk, com parâmetros (VARs)
Pergunta
Eu tenho um script awk que tenho definido assim:
#!/usr/bin/env awk
BEGIN { if (!len) len = 1; end = start + len }
{ for (i = start; i < end; i++) { print $1 } }
Eu salva-lo como columns
e chmod +x
'd-lo. Eu quero chamá-lo de modo que start
e end
são definidos como ele percorre mais de um arquivo. Eu estava pensando isso deve funcionar:
cat some_file | columns -v start=2
Mas isso não acontece. Ajuda!
Solução
Tente usar:
#!/usr/bin/awk -f
como intérprete
Outras dicas
env é a maneira mais fácil de lidar com este problema:
#!/usr/bin/env -S awk -f
para adicionar mais opções, e para garantir que não haja interferência com os seus argumentos, e argumentos de awk:
#!/usr/bin/env -S awk -F: -f ${_} --
BEGIN {
# delete argv[1], which == ENVIRON[_]
delete ARGV[1]
} # rest of my awk program
como env tem um padrão POSIX, este shbang deverá fazê-lo em torno das dificuldades de implementações shbang não-padrão em todo unixen.
Editar
depois de ter escrito este eu percebi que '-S' é um não-compatível com POSIX FreeBSD env extensão . envoltório Então shell é provavelmente o caminho a percorrer, lamentável que isso seja.
A seguir é a resposta para este problema -
#!/bin/awk -f