Вызов скрипта с awk-шебангом с параметрами (vars) - PullRequest
24 голосов
/ 13 сентября 2009

У меня есть сценарий awk, который я определил таким образом:

#!/usr/bin/env awk
BEGIN { if (!len) len = 1; end = start + len }
{ for (i = start; i < end; i++) { print $1 } }

Я сохранил его как columns и chmod +x. Я хочу вызвать его так, чтобы start и end были определены при его прохождении через файл. Я думал, что это должно работать:

cat some_file | columns -v start=2

Но это не так. Помогите!

Ответы [ 3 ]

44 голосов
/ 13 сентября 2009

Попробуйте использовать:

#!/usr/bin/awk -f

как переводчик

5 голосов
/ 08 августа 2011

env - самый простой способ решить эту проблему:

#!/usr/bin/env -S awk -f

, чтобы добавить больше опций и не допустить вмешательства в ваши аргументы и аргументы awk:

#!/usr/bin/env -S awk -F: -f ${_} --
BEGIN {
    # delete argv[1], which == ENVIRON[_]
    delete ARGV[1]
} # rest of my awk program

, поскольку env имеет стандарт POSIX, этот shbang поможет вам преодолеть трудности нестандартных реализаций shbang в unixen.

EDIT

после написания этого я понял, что '-S' не является POSIX-совместимым расширением env . Так что оболочка оболочки - это, вероятно, верный путь, как это ни прискорбно.

1 голос
/ 05 октября 2016

Ниже приведен ответ на эту проблему -

#!/bin/awk -f 
...