指示说明您的脚本文件将在我们的系统上使用以下命令进行测试:
awk -f ./awk4.awk input.csv
编写一个 awk 脚本,它将接受以下文件并输出名称和等级字段
显然,我创建了一个 bash 脚本,它需要是一个 awk 脚本,可以从命令行使用 awk -f 运行。下面是我的代码。有没有一种简单的方法可以将我的 bash 脚本转换为 awk 脚本而无需重做所有事情?真的对方向感到困惑。
#!/usr/bin/awk -f
##comment create an awk script that will accept the following file and output the name and grade fields
##comment specify the delimiter as ","
awk -F, '
/./ {
##comment print the name and grade, which is first two fields
print $1" "$2
}' $1
在 awk 脚本中,内容是您将
awk
作为命令提供的内容。所以在这种情况下,那就是:但是,这会使使用变得棘手,
-F ,
所以改为设置FS
在一个BEGIN
块中。所以你的脚本是:
您编写了一个
awk
脚本,但将它放在了一个脚本中。这是你的awk
脚本:将其保存到文件中
script.awk
并运行现在对您的脚本有一些提示:
awk
命令看起来像CONDITION {COMMAND(S)}
. 如果CONDITION
为一行(记录)完成,{COMMAND(S)}
则执行。如果没有CONDITION
,{COMMAND(S)}
则对所有记录执行 is/are,如果没有,{COMMAND(S)}
则只要CONDITION
满足就打印记录。在你的情况下:
/./
是一个匹配任何字符的行的正则表达式......所以除了空行之外 - 它几乎是多余的,作为一个条件您
" "
用作变量之间的分隔符,,
用于应用默认值您需要
,
在初始块中的脚本中提供 using 作为分隔符BEGIN
。如果您也想使用逗号作为输出分隔符,请使用:
awk 脚本只是 awk 命令的集合,可以由
awk
. 编写 awk 脚本有两种方法:只需将 awk 命令写入文本文件并使用
awk -f /path/to/file.awk
. 在你的情况下,那将是:你会运行它:
或者,如果您需要使用 just 运行它
awk -f ./path/to/file.awk inputFile
,而无需-F,
在脚本本身中设置字段分隔符:然后运行
awk -f /path/to/file.awk inputFile
.编写命令,但使用 shebang 指定应由哪个解释器读取脚本。在你的情况下,这看起来像这样:
然后你可以使脚本 exwecutable (
chmod a+x /path/to/file.awk
) 并像这样运行它:这些都是 awk 脚本。第三种选择是编写一个shell脚本并让 shell 脚本运行 awk。看起来像这样:
您所拥有的既不是一回事,也不是另一回事:您使用的是 awk shebang,但使用的是 shell 脚本而不是 awk 脚本。