AWK脚本命令行参数和文件输入

时间:2020-05-12 19:56:32

标签: unix awk

#!/usr/bin/awk -f

BEGIN{
    print ARGV[1]
}
{
    print $1, $3
}
END{
    print "Done"
}

我需要同时使用命令行参数和文件作为输入。 我尝试了以下操作,并显示了错误:

cat users.txt |./temp.awk 3
3
awk: ./temp.awk:4: fatal: cannot open file `3' for reading (No such file or directory)

显示了命令行参数,但是我似乎找不到一种读取文件的方法。

谢谢。

1 个答案:

答案 0 :(得分:1)

在这种情况下,您可以在ARGV[1]块内设置ARGCBEGIN

BEGIN {
    print ARGV[1]
    # Empty ARGV[1] so that it is not treated as a filename
    ARGV[1]=""
}
{
    print $1, $3
}
END {
    print "Done"
}

man 1p awk

ARGC数组ARGV中的元素数量。

ARGV一组命令行参数(不包括选项和程序参数),其编号从零到ARGC-1。

ARGV中的参数可以修改或添加; ARGC可以更改。当每个输入文件结束时,awk将把ARGV-1的下一个非null元素(直到当前值ARGC-1(含)在内)作为下一个输入文件的名称。因此,将ARGV的元素设置为null意味着不应将其视为输入文件。名称“ ”表示标准输入。如果参数与赋值操作数的格式匹配,则应将此参数视为赋值,而不是文件参数。