-1

鉴于此脚本

#!/bin/awk -f
{
  print $1
}

可以这样称呼

foo.awk foo.txt

但是我希望脚本总是调用foo.txt. 所以我想修改脚本,这样就可以在没有输入文件的情况下调用它,就像这样

foo.awk
4

3 回答 3

4
#!/bin/awk -f
BEGIN {ARGV[ARGC++] = "foo.txt"}
{print $1}

这将添加foo.txt到参数列表的末尾,就像您将它放在命令行中一样。这还有一个额外的好处,就是允许您扩展您的脚本来做更多的事情,而不仅仅是打印,而不必将所有内容都放在BEGIN块中。

于 2013-05-23T23:41:12.547 回答
0

好吧,也许做这个把戏?(欺骗?)

#!/bin/sh
awk '{print $1}' foo.txt

你可以把它命名为foo.awk

接着

chmod +x foo.awk

现在尝试./foo.awk在同一目录下。

编辑

#!/bin/awk -f
BEGIN{while(getline < "/path/to/foo.txt")print $1 }

奇怪的要求。为什么 bash 包装器不符合您的要求?无论如何,您确实标记了问题shell ,上面的脚本应该是您需要的。

于 2013-05-23T22:27:28.967 回答
0

我会为此使用外壳包装器:

#!/bin/bash
foo.awk foo.txt
于 2013-05-23T22:27:31.437 回答