Reputation: 13
#!/usr/bin/awk -f
BEGIN{
print ARGV[1]
}
{
print $1, $3
}
END{
print "Done"
}
I need to have both command-line arguments and file as input. I have tried the following and got the error shown:
cat users.txt |./temp.awk 3
3
awk: ./temp.awk:4: fatal: cannot open file `3' for reading (No such file or directory)
The command-line argument is shown but i cannot seem to find a way to read the file.
Thanks.
Upvotes: 0
Views: 1153
Reputation:
In this case, you may set ARGV[1]
or ARGC
inside the BEGIN
block:
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
The number of elements in theARGV
array.
ARGV
An array of command line arguments, excluding options and the program argument, numbered from zero toARGC
−1.The arguments in
ARGV
can be modified or added to;ARGC
can be altered. As each input file ends, awk shall treat the next non-null element ofARGV
, up to the current value ofARGC
−1, inclusive, as the name of the next input file. Thus, setting an element ofARGV
to null means that it shall not be treated as an input file. The name '−
' indicates the standard input. If an argument matches the format of an assignment operand, this argument shall be treated as an assignment rather than a file argument.
Upvotes: 2