Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix AWK脚本命令行参数和文件输入_Unix_Awk - Fatal编程技术网

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

Unix AWK脚本命令行参数和文件输入,unix,awk,Unix,Awk,我需要命令行参数和文件作为输入。 我尝试了以下操作并显示错误: #!/usr/bin/awk -f BEGIN{ print ARGV[1] } { print $1, $3 } END{ print "Done" } 显示了命令行参数,但我似乎找不到读取文件的方法 谢谢。在这种情况下,您可以在开始块内设置ARGV[1]或ARGC: 男子1p awk: ARGC ARGV数组中的元素数 ARGV命令行参数数组,不包括选项和程序参数,编号从零到ARGC−一, ARGV中

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

#!/usr/bin/awk -f

BEGIN{
    print ARGV[1]
}
{
    print $1, $3
}
END{
    print "Done"
}
显示了命令行参数,但我似乎找不到读取文件的方法

谢谢。

在这种情况下,您可以在开始块内设置ARGV[1]或ARGC:

男子1p awk:

ARGC ARGV数组中的元素数

ARGV命令行参数数组,不包括选项和程序参数,编号从零到ARGC−一,

ARGV中的参数可以修改或添加到;ARGC可以改变。当每个输入文件结束时,awk应处理ARGV的下一个非空元素,直到ARGC的当前值−1(包含),作为下一个输入文件的名称。因此,将ARGV的元素设置为null意味着它不应被视为输入文件。名字是−' 指示标准输入。如果参数与赋值操作数的格式匹配,则应将此参数视为赋值,而不是文件参数


awk需要的是文件名而不是3。如果您需要传递一个参数,可以使用v=3代替,只需报告该值即可。@karakfa不使用v=3可以做到这一点吗?谢谢您的回复。不,否则awk将需要一个文件名。只有x=y类型被视为变量Decellation。请将awk脚本放入bash脚本中。请参阅
cat users.txt |./temp.awk 3
3
awk: ./temp.awk:4: fatal: cannot open file `3' for reading (No such file or directory)
BEGIN {
    print ARGV[1]
    # Empty ARGV[1] so that it is not treated as a filename
    ARGV[1]=""
}
{
    print $1, $3
}
END {
    print "Done"
}