How to pass shell variable to awk command inside shell script

后端 未结 1 794
再見小時候
再見小時候 2021-01-28 18:23

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

相关标签:
1条回答
  • 2021-01-28 19:17

    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}"
    
    0 讨论(0)
提交回复
热议问题