Вызов скрипта с awk-шебангом с параметрами (vars)

StackOverflow https://stackoverflow.com/questions/1418245

  •  07-07-2019
  •  | 
  •  

Вопрос

У меня есть сценарий 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 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top