![](/img/trans.png)
[英]Initialize an Array inside AWK Command and use the Array to Print using AWK
[英]How to use awk {print} inside an inline ssh command
我正在尝试运行如下所示的内联 ssh 命令:
ssh user@127.0.0.1 "df / -h | awk 'FNR == 2 {print $3}'"
我希望输出为3.8G
(因为这是第二行,第三列),但相反,我得到了/dev/sda1 6.9G 3.8G 2.8G 58% /
(整个第二行)。
这意味着FNR == 2
有效,但{print $3}
无效。
如果我直接在我使用 ssh 的机器上运行该命令,那么我会得到预期的结果,只是在通过上面的内联 ssh 命令调用它时不会。
此代码最终将在 bash 脚本中运行。 难道不能用这种方式打印吗? 如果没有,您是否可以建议另一种方法? 我对终端生活比较陌生,所以请耐心等待。
贝壳报价的乐趣。 线路:
ssh user@127.0.0.1 "df / -h | awk 'FNR == 2 {print $3}'"
由 shell 解析,它使用两个参数调用ssh
:
user@127.0.01
和df / -h | awk 'FNR == 2 {print }'
df / -h | awk 'FNR == 2 {print }'
$3
是内插的,并且(我假设)是空的。 为了防止这种情况,您有很多选择。 其中之一是:
ssh user@127.0.0.1 << \EOF
df / -h | awk 'FNR == 2 {print $3}'
EOF
另一个是:
ssh user@127.0.0.1 sh -c '"df / -h | awk '"'"'FNR == 2 {print $3}'"'"'"'
问题在于您传递ssh
参数的方式。
通过调用:
ssh user@127.0.0.1 "df / -h | awk 'FNR == 2 {print $3}'"
您正在传递两个参数:
user@127.0.0.1
"df / -h | awk 'FNR == 2 {print $3}'"
由于您的第二个参数在双引号内给出,因此$3
变量将被扩展。 您可以通过转义美元符号来防止这种变量扩展:
ssh user@127.0.0.1 "df / -h | awk 'FNR == 2 {print \$3}'"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.