"bad interpreter" error message when trying to run awk executable
awk, linux
Solution
From a command line, run this command:
which awk
This will print the path of AWK, which is likely `/usr/bin/awk`. Correct the first line and your script should work.
Also, your script shouldn't have the single-quote characters at the beginning and end. You can run AWK from the command line and pass in a script as a quoted string, or you can write a script in a file and use the `#!/usr/bin/awk` first line, with the commands just in the file.
Also, the first line of your script isn't going to work right. In AWK, setup code needs to be inside the `BEGIN` block, and `$1` is a reference to the first word in the input line. You need to use `ARGV[1]` to refer to the first argument.
http://www.gnu.org/software/gawk/manual/html_node/ARGC-and-ARGV.html
As @TrueY pointed out, there should be a `-f` on the first line:
#!/usr/bin/awk -f
This is discussed here: Invoking a script, which has an awk shebang, with parameters (vars)
Working, tested version of the program:
#!/usr/bin/awk -f
## pick1 - pick one random number out of y
## main routine
BEGIN {
TOPNUM = ARGV[1]
## set seed
srand ()
## get a random number
select = 1 +int(rand() * TOPNUM)
# print pick
print select
}
Problem
I'm trying to make an awk file executable. I've written the script, and did `chmod +x filename`. Here is the code: ``` #!/bin/awk -v 'TOPNUM = $1 ## pick1 - pick one random number out of y ## main routine BEGIN { ## set seed srand () ## get a random number select = 1 +int(rand() * TOPNUM) # print pick print select }' ``` When I try and run the program and put in a variable for the `TOPNUM`: ``` pick1 50 ``` I get the response: ``` -bash: /home/petersone/bin/pick1: /bin/awk: bad interpreter: No such file or directory ``` I'm sure that there's something simple that I'm messing up, but I simply cannot figure out what it is. How can I fix this?