Calling Awk in a shell script

后端 未结 4 1653
遥遥无期
遥遥无期 2021-01-18 19:32

I have this command which executes correctly if run directly on the terminal.

awk \'/word/ {print NR}\' file.txt | head -n 1

The purpose i

相关标签:
4条回答
  • 2021-01-18 19:34

    you could also pass the value as a variable to awk:

    awk -v varA=$1 '{if(match($0,varA)>0){print NR;}}' $2 | head -n 1
    

    Seems more cumbersome than the above, but illustrates passing vars.

    0 讨论(0)
  • 2021-01-18 19:36

    You should use AWK's variable passing feature:

    awk -v patt="$1" '$0 ~ patt {print NR; exit}' "$2"
    

    The exit makes the head -1 unnecessary.

    0 讨论(0)
  • 2021-01-18 19:45

    In the shell, single-quotes prevent parameter-substitution; so if your script is invoked like this:

    script.sh word
    

    then you want to run this AWK program:

    /word/ {print NR}
    

    but you're actually running this one:

    /$1/ {print NR}
    

    and needless to say, AWK has no idea what $1 is supposed to be.

    To fix this, change your single-quotes to double-quotes:

    awk "/$1/ {print NR}" $2 | head -n 1
    

    so that the shell will substitute word for $1.

    0 讨论(0)
  • 2021-01-18 19:58

    Replace the single quotes with double quotes so that the $1 is evaluated by the shell:

    awk "/$1/ {print NR}" $2 | head -n 1
    
    0 讨论(0)
提交回复
热议问题