有没有办法将小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',' | ...