Search code examples
bashawkcommand-substitution

Does awk -v accept command substitution?


Can I create an awk variable in a one liner using bash command substitution techniques? Here is what I am trying, but something is not right.

awk -v AVG=$(uptime|awk '{print $(NF-2)}') '{ if ( AVG >= 1 ) print "there is a load"  }'

Perhaps it's because the command substitution uses Awk (though I doubt it)? Maybe that's too "Inception-ish"? GNU Awk 3.1.7


Solution

  • There is nothing wrong with your command. Your command is waiting for an input and that's the only reason why it doesn't get executed!

    For instance:

    $ awk -v AVG=$(uptime|awk '{print $(NF-2)}') '{ if ( AVG >= 0 ) print "there is a load"  }'
    abc                 ## I typed.
    there is a load     ## Output.
    

    Just include BEGIN in your command as suggested by the experts!

    $ awk -v AVG=$(uptime|awk '{print $(NF-2)}') 'BEGIN{ if ( AVG >= 0 ) print "there is a load"  }'
    there is a load