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!

Foi útil?

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 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top