我可以使用bash命令替換技術在一個班輪中創建一個awk變量嗎?這是我正在嘗試的,但有些不對。awk -v是否接受命令替換?
awk -v AVG=$(uptime|awk '{print $(NF-2)}') '{ if (AVG >= 1) print "there is a load" }'
也許是因爲命令替換使用了Awk(雖然我懷疑它)?也許這也是「先發制人」? GNU Awk 3.1.7
我可以使用bash命令替換技術在一個班輪中創建一個awk變量嗎?這是我正在嘗試的,但有些不對。awk -v是否接受命令替換?
awk -v AVG=$(uptime|awk '{print $(NF-2)}') '{ if (AVG >= 1) print "there is a load" }'
也許是因爲命令替換使用了Awk(雖然我懷疑它)?也許這也是「先發制人」? GNU Awk 3.1.7
沒有什麼不對您的命令。你的命令正在等待輸入,這就是它沒有被執行的唯一原因!
例如:
$ awk -v AVG=$(uptime|awk '{print $(NF-2)}') '{ if (AVG >= 0) print "there is a load" }'
abc ## I typed.
there is a load ## Output.
只需在您的命令首先專家們的建議!
$ awk -v AVG=$(uptime|awk '{print $(NF-2)}') 'BEGIN{ if (AVG >= 0) print "there is a load" }'
there is a load
由於上一個awk命令沒有輸入文件,因此只能對該腳本使用BEGIN
子句。因此,您可以嘗試以下操作:
awk -v AVG=$(uptime|awk '{print $(NF-2)}') 'BEGIN{ if (AVG >= 1) print "there is a load" }'
爲什麼在這裏使用變量?至於AWK讀取stdin
除非你明確指定相反,這應該是一個可取的方法:
$ uptime | awk '$(NF-2) >= 1 { print "there is a load" }'
there is a load
此:
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" }'
你能解決您的錯字錯誤? (NF-2)缺少$ -sign。應該是$(NF-2)。 – alvits
@ user3088572,謝謝。固定。抱歉。 –
+1歡迎您。現在我可以投票了。 – alvits