在命令行中将 BASH 个参数传递给 gawk
Passing BASH arguments to gawk at command line
我想制作一个简单的 gawk
脚本来提取某个文件的第 n 列。文件的 name 和 n 的值我想在命令行输入。我用 chmod +x
.
使这个脚本可执行
因此要从文件 foo 中提取第三列,我将输入:
awkextract foo 3
我对脚本 awkextract
的尝试是:
#!/opt/local/bin/gawk -v k= -f
{print $k}
但是废话结果表明这是行不通的。
我该如何解决?
PS。我知道我可以通过 cut
命令做到这一点,我只是在试验......
不要通过 shebang 调用 awk,只需将其放入您的 shell 脚本中即可:
/opt/local/bin/gawk -v k="" '
{print $k}
' ""
正如 中所指出的,最简单的方法是将其包装在 shell 脚本中。尽管非常笨重,但在 awk 可执行文件中也并非不可能:
#!/usr/local/bin/awk -f
BEGIN {
col = ARGV[2]
ARGV[2] = ""
}
{ print $col }
/usr/local/bin/awk
只是我机器上 awk 的路径。
在 BEGIN
块中,我们直接操作参数列表:我们将 col
设置为第二个命令行参数,然后将第二个参数设置为空字符串。 ARGV
数组包含所有命令行参数并且是零索引的,ARGV[0]
通常包含 awk
(但这取决于您的系统),因此对于命令 ./awkextract foo 3
, ARGV[1]
是 foo
并且 ARGV[2]
是 3
.
现在 ARGV
中唯一留下的非空参数是要处理的文件的名称,{ print $col }
操作是每一行的 运行。
我想制作一个简单的 gawk
脚本来提取某个文件的第 n 列。文件的 name 和 n 的值我想在命令行输入。我用 chmod +x
.
因此要从文件 foo 中提取第三列,我将输入:
awkextract foo 3
我对脚本 awkextract
的尝试是:
#!/opt/local/bin/gawk -v k= -f
{print $k}
但是废话结果表明这是行不通的。 我该如何解决?
PS。我知道我可以通过 cut
命令做到这一点,我只是在试验......
不要通过 shebang 调用 awk,只需将其放入您的 shell 脚本中即可:
/opt/local/bin/gawk -v k="" '
{print $k}
' ""
正如
#!/usr/local/bin/awk -f
BEGIN {
col = ARGV[2]
ARGV[2] = ""
}
{ print $col }
/usr/local/bin/awk
只是我机器上 awk 的路径。
在 BEGIN
块中,我们直接操作参数列表:我们将 col
设置为第二个命令行参数,然后将第二个参数设置为空字符串。 ARGV
数组包含所有命令行参数并且是零索引的,ARGV[0]
通常包含 awk
(但这取决于您的系统),因此对于命令 ./awkextract foo 3
, ARGV[1]
是 foo
并且 ARGV[2]
是 3
.
现在 ARGV
中唯一留下的非空参数是要处理的文件的名称,{ print $col }
操作是每一行的 运行。