Вызов script, который имеет awk shebang, с параметрами (vars)

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

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

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

cat some_file | columns -v start=2

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

Ответ 1

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

#!/usr/bin/awk -f

в качестве интерпретатора

Ответ 2

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.

ИЗМЕНИТЬ

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

Ответ 3

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

#!/bin/awk -f