I just want to pass a shell variable that stores name of a file to awk command. When I searched this problem on the net I see many different options but none of them worked for me. I tried the followings:
#!/bin/bash
for i in "$@"
do
case $i in
-p=*|--producedfile=*)
PFILE="${i#*=}"
shift # past argument=value
*)
# unknown option
;;
esac
done
echo "PRODUCEDFILE = ${PFILE}"
awk -v FILE=${PFILE} '{print FILE $0}' #DIDNT WORK
awk '{print FILE $0}' ${PFILE} # DIDNT WORK
awk -v FILE=${PFILE} '{print $0}' FILE #DIDNT WORK
To pass a shell variable to
awk
, you correctly used-v
option.However, the
shift
was unnecessary (you're iterating options withfor
),;;
was missing (you have to terminate each case branch), as well as was the name of the file forawk
to process. Fixed, your script looks like:Note however,
awk
already makes the name of the currently processed file available in theFILENAME
variable. So, you could also write the last line as: