在 awk 脚本头中指定其他标志

And*_*man 1 bash awk

我想使用#!/bin/awk -f标头编写 awk 脚本文件,但我希望该脚本始终用作:字段分隔符。但由于某种原因,写作#!/bin.awk -F: -f给了我一个语法错误。我还希望这个脚本始终在同一个文件上运行,所以我也想对其进行硬编码。基本上,我想要的工作是这样的:

#!/bin/awk -F: -f -- /etc/passwd
Run Code Online (Sandbox Code Playgroud)

接下来是一些 awk 代码

Ed *_*ton 5

切勿使用 shebang 来调用 awk,因为与在 shell 脚本中简单地调用 awk 相比,这没有任何有价值的好处,而且会剥夺您将传递给 shell 脚本的参数分离为 shell 要处理的值、供 awk 处理使用的值的能力-v,使用脚本末尾的赋值来处理 awk 的值以及 awk 要运行的文件名。

写吧:

#!/usr/bin/env bash
awk -F':' '
whatever
' /etc/passwd
Run Code Online (Sandbox Code Playgroud)

这样,如果有必要,您可以将其调整为:

#!/usr/bin/env bash
sort "$1" |
awk -F':' -v foo="$2" '
whatever
' - FS="$3" "$4"
Run Code Online (Sandbox Code Playgroud)

或者您需要做的任何其他事情,以最适当地使用传递给 shell 脚本的参数并进行增强(例如,添加输入的初始排序),而无需更改脚本的调用者。