Вызов скрипта с awk-шебангом с параметрами (vars)
Вопрос
У меня есть сценарий awk, который я определил следующим образом:
#!/usr/bin/env awk
BEGIN { if (!len) len = 1; end = start + len }
{ for (i = start; i < end; i++) { print $1 } }
Я сохранил его как столбцы
и chmod + x
. Я хочу вызвать его так, чтобы start
и end
были определены при прохождении через файл. Я думал, что это должно работать:
cat some_file | columns -v start=2
Но это не так. Помогите!
Решение
Попробуйте использовать:
#!/usr/bin/awk -f
в качестве переводчика
Другие советы
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 . Так что оболочка оболочки - это, вероятно, верный путь. К сожалению, так оно и есть.
Ниже приведен ответ на эту проблему -
#!/bin/awk -f