Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

awk script header: #!/bin/bash or #!/bin/awk -f?

In an awk file, e.g example.awk, should the header be #!/bin/bash or #!/bin/awk -f?

The reason for my question is that if I try this command in the console I receive the correct file.txt with "line of text":

 awk 'BEGIN {print "line of text"}' >> file.txt

but if i try execute the following file with ./example.awk:

#! /bin/awk -f
awk 'BEGIN {print "line of text"}' >> file.txt

it returns an error:

$ ./awk-usage.awk
awk: ./awk-usage.awk:3: awk 'BEGIN {print "line of text"}' >> file.txt
awk: ./awk-usage.awk:3:     ^ invalid char ''' in expression

If I change the header to #!/bin/bash or #!/bin/sh it works.

What is my error? What is the reason of that?

like image 888
anvd Avatar asked Jan 20 '23 18:01

anvd


1 Answers

Since you explicitly run the awk command, you should use #!/bin/bash. You can use #!/bin/awk if you remove the awk command and include only the awk program (e.g. BEGIN {print "line of text"}), but then you need to append to file using awk syntax (print ... >> file).

awk -f takes a file containing the awk script, so that is completely wrong here.

like image 83
moinudin Avatar answered Jan 24 '23 03:01

moinudin