awk:パスにスクリプトがありますか?

awk:パスにスクリプトがありますか?

awkパスに小さなスクリプトを置く方法はありますか?

たとえば、非常に便利な照合操作があります。

// collate-csv.awk
FNR > 1 || NR == 1

あらゆる種類の素晴らしい方法で使用できます。

xargs -a $(find * -name *.csv) awk -F',' -f collate-csv.awk | ...

唯一の問題は、どこでもawkツールを呼び出すことができないことです。実行可能なシェルスクリプトを使用すると、パスのbinフォルダに配置できます。awk実行不可能なソースファイルをファイルシステムのどこでも使用できるようにするメカニズムはLinuxにありますか?

(「メカニズム」が「ただハンマーで打つのはどうですか?」タイプのパッチワークではないと仮定)

答え1

@Roamiaの答えに加えて、AWKPATH変数を見つけるディレクトリのリストとして使用することもできます。collate-csv.awk

AWKPATH=${HOME}/include/awk:/some/other/path
export AWKPATH
xargs -a $(find * -name *.csv) awk -f collate-csv.awk -F',' | ...

参考にしてください

  • .awk拡張は一貫性がある限り必須ではありません。
  • #!/usr/bin/awk -fスクリプトがスタンドアロン(非呼び出し)として使用される場合、shebang行は必須ですawk -f。例えば、
  • あなたは使用する必要がありますawk -f(そしてawkは使い方を知っていますが、AWKPATHbashはそうではありません)

答え2

実行可能なawkスクリプトを生成して$PATH

mkdir -p "$HOME/bin"
cat >"$HOME/bin/collate-csv <<'x'
#!/usr/bin/awk -f
#
# collate-csv.awk
#
NR == 1 { print }
FNR == 1 { next }
{print}
x

chmod a+x "$HOME/bin/collate-csv"
export PATH="$PATH:$HOME/bin"

これでcollate-csv他のコマンドのように使用できるようになります

xargs -a $(find * -name *.csv) collate-csv -F',' | ...

関連情報