我已经环顾了一会儿,发现只有涉及这个主题的问题或者给我一个不起作用的答案。这是问题:
我正在为学校做作业,要求我读取awk脚本的命令行参数(这看起来很奇怪,但是呃)。我们正在使用旧版本的Unix,而且我正在运行Bash。这个awk只有-f和-Fc选项。基本上,我一直试图做“awk -f awk_script arg1 arg2 arg3 arg4 arg5 arg6”,但每次awk都试图将arg1作为文件打开,但事实并非如此。我在其他地方看到的一个例子是:
awk 'BEGIN { print "ARGV[1] = ", ARGV[1] }' foo bar
它应该打印“foo”,但在这个系统上我只得到输出“ARGV [1] = awk:无法打开foo”。总而言之,有什么方法可以解决这个问题吗?可以使用awk这个旧的read命令行参数并将它们用于输入文件以外的任何其他内容吗?教师注意文件暗示上述用法(打印foo),但他的程序甚至没有运行,所以......
非常感谢任何帮助。
编辑后:使用SunOS 5.10并且此awk不支持-v选项,只有-f和-Fc
答案 0 :(得分:1)
您可以在读取参数后递减ARGC,以便awk
仅将第一个(s)参数视为输入文件:
#!/bin/awk -f
BEGIN {
for (i=ARGC; i>2; i--) {
print ARGV[ARGC-1];
ARGC--;
}
}
…
或者,您可以在阅读完所有参数后重置ARGC:
#!/bin/awk -f
BEGIN {
for (i=0; i<ARGC; i++) {
print ARGV[ARGC-1];
}
ARGC=2;
}
…
两种方法都会正确处理myawkscript.awk foobar foo bar …
,好像foobar是唯一要处理的文件(当然,如果你想将两个第一个参数作为文件,你可以将ARGC设置为3)。在您的特定情况下,您似乎不想处理任何文件,因此您将ARGC设置为1.
答案 1 :(得分:0)
可能的解决办法 - 可能不被接受 - 是使用awk
的-v选项。
awk -v arg1=foo 'BEGIN { print arg1; }'
答案 2 :(得分:0)
使用nawk
或/usr/xpg4/bin/awk
。这些是更新版本的awk,支持更多功能。
或者,您可以安装另一个版本的awk,如mawk
或GNU awk。