硬编码输入文件

时间:2013-05-23 22:22:56

标签: awk

鉴于此脚本

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

可以像这样调用

foo.awk foo.txt

但是我希望脚本始终调用foo.txt。所以我想修改脚本,以便可以在没有输入文件的情况下调用它,比如这个

foo.awk

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分: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标记了问题 无论如何,上面的脚本应该是你需要的。

答案 2 :(得分:0)

我会使用shell包装器:

#!/bin/bash
foo.awk foo.txt