awk-从文件运行argc / argv时未提供预期的输出

时间:2019-05-17 14:55:34

标签: bash awk

我制作了这个awk代码以打印2个姓名

#! /usr/bin/awk -f

BEGIN {
    for (i=0; i < ARGC; i++)
    print ARGV[i]
} inventory-shipped BBS-list

我希望结果是

awk
inventory-shipped
BBS-list

但是当我运行它时,脚本仍然希望我在上面写一些东西来打印,即使我希望已经在此打印的列表也是如此。但是当我从终端这样写的时候

$ awk 'BEGIN {
        for (i=0; i <ARGC; i++)
        print ARGV[i]
}' inventory-shipped BBS-list

我可以打印预期的结果。

3 个答案:

答案 0 :(得分:1)

您不能在脚本中放入命令行参数。您应该将其运行为

./scriptname inventory-shipped BBS-list

答案 1 :(得分:1)

不要使用shebang从shell脚本执行awk,只需调用它即可:

#!/bin/env bash

awk '
BEGIN {
    for (i=0; i < ARGC; i++)
    print ARGV[i]
}
' inventory-shipped BBS-list

相对于如何将Shell脚本参数分为awk变量和awk文件名或执行其他任何您喜欢的操作,这将给您更大的灵活性。

答案 2 :(得分:1)

您可能想尝试一下

script.awk

#!/usr/bin/awk -f
BEGIN {
    for (i=0; i < ARGC; i++)
    print ARGV[i]
}

运行脚本

chmod a+x script.awk
./script.awk inventory-shipped BBS-list

输出

awk
inventory-shipped
BBS-list