我可以使用bash命令替换技术在一个内核中创建一个awk变量吗?这是我正在尝试的,但有些事情是不对的。
awk -v AVG=$(uptime|awk '{print $(NF-2)}') '{ if ( AVG >= 1 ) print "there is a load" }'
也许是因为命令替换使用了Awk(虽然我对此表示怀疑)?也许这也是“Inception-ish”? GNU Awk 3.1.7
答案 0 :(得分:3)
为什么要在这里使用变量?只要AWK读取stdin
,除非您明确指出相反的情况,否则这应该是一种更好的方式:
$ uptime | awk '$(NF-2) >= 1 { print "there is a load" }'
there is a load
答案 1 :(得分:1)
你的命令没有错。你的命令正在等待输入,这是它没有被执行的唯一原因!
例如:
$ awk -v AVG=$(uptime|awk '{print $(NF-2)}') '{ if ( AVG >= 0 ) print "there is a load" }'
abc ## I typed.
there is a load ## Output.
按照专家的建议,将BEGIN包含在您的命令中!
$ awk -v AVG=$(uptime|awk '{print $(NF-2)}') 'BEGIN{ if ( AVG >= 0 ) print "there is a load" }'
there is a load
答案 2 :(得分:0)
由于上一个awk命令没有输入文件,因此只能对该脚本使用BEGIN
子句。所以你可以尝试以下方法:
awk -v AVG=$(uptime|awk '{print $(NF-2)}') 'BEGIN{ if ( AVG >= 1 ) print "there is a load" }'
答案 3 :(得分:0)
此:
awk -v AVG=$(uptime|awk '{print $(NF-2)}') '{ if ( AVG >= 1 ) print "there is a load" }'
需要一个BEGIN,正如其他人所说:
awk -v AVG=$(uptime|awk '{print $(NF-2)}') 'BEGIN{ if ( AVG >= 1 ) print "there is a load" }'
但是,你也不需要两次调用awk,因为它可以写成:
awk -v uptime=$(uptime) 'BEGIN{ n=split(uptime,u); AVG=u[n-2]; if ( AVG >= 1 ) print "there is a load" }'
或者更有可能是你想要的:
uptime | awk '{ AVG=$(NF-2); if ( AVG >= 1 ) print "there is a load" }'
可以简化为:
uptime | awk '$(NF-2) >= 1 { print "there is a load" }'