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
To pass a shell variable to awk, you correctly used -v option.
However, the shift was unnecessary (you're iterating options with for), ;; was missing (you have to terminate each case branch), as well as was the name of the file for awk to process. Fixed, your script looks like:
#!/bin/bash
for i in "$@"; do
case $i in
-p=*|--producedfile=*)
PFILE="${i#*=}"
;;
*)
# unknown option
;;
esac
done
echo "PRODUCEDFILE = ${PFILE}"
awk -v FILE="${PFILE}" '{print FILE, $0}' "${PFILE}"
Note however, awk already makes the name of the currently processed file available in the FILENAME variable. So, you could also write the last line as:
awk '{print FILENAME, $0}' "${PFILE}"