35

このように定義した awk スクリプトがあります。

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

名前を付けて保存しましcolumnschmod +xstartファイルをトラバースするときにとendが定義されるように呼び出したいと思います。私はこれがうまくいくはずだと思っていました:

cat some_file | columns -v start=2

しかし、そうではありません。ヘルプ!

4

4 に答える 4

61

Try using:

#!/usr/bin/awk -f

as an interpreter

于 2009-09-13T17:22:04.407 に答える
12

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 は unixen 全体で非標準の shbang 実装の問題を回避できるはずです。

編集

これを書いた後、「-S」は POSIX に準拠していない FreeBSD 環境拡張であることに気付きました。そのため、残念ながらシェルラッパーがおそらく進むべき道です。

于 2011-08-08T03:36:51.520 に答える
0

以下は、この問題に対する答えです -

#!/bin/awk -f 
于 2016-10-05T11:01:14.927 に答える