awk:路径上的脚本?

awk:路径上的脚本?

有没有办法将小awk脚本放在路径上?

例如,我有一个非常有用的整理操作:

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

我可以通过各种很棒的方式使用它:

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

唯一的问题是我无法从任何地方调用我的 awk 工具。通过可执行的 shell 脚本,我可以将其放入路径上的 bin 文件夹中。 Linux 中是否有一种机制可以让我awk在文件系统中的任何位置都可以使用这些不可执行的源文件?

(前提是“机制”不是“你为什么不直接用锤子敲它”式的拼凑)

答案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扩展不是强制性的,只要保持一致即可,
  • shebang 行例如#!/usr/bin/awk -f当脚本作为脚本独立使用时是强制性的(不awk -f调用),
  • 你必须使用awk -f(并且 awk 知道如何使用AWKPATH,bash 不知道)

答案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',' | ...

相关内容