将awk命令结果输出到变量

用户468587

我跑从控制台输出它正确的结果下面的命令:0

sudo -H -u hadoop bash -c "/home/hadoop/hadoop-install/bin/hadoop dfsadmin -report | grep 'Under replicated blocks' | awk '{print \$4}'"

但是,如果我将其放在shell脚本中并分配给变量,则“ awk”将不再起作用,它只会从“ grep”输出整个结果:

replications=`sudo -H -u hadoop bash -c "/home/hadoop/hadoop-install/bin/hadoop dfsadmin -report | grep 'Under replicated blocks' | awk '{print \$4}'"`
echo "Replications: $replications"

结果:Replications: Under replicated blocks: 0我如何才能再次使awk工作,仅输出第4列,该列为0,而不是整个字符串?

温特穆特

在反引号命令替换中,\其后$为just $根据POSIX标准:

在命令替换的反引号格式中,反斜杠应保留其字面意思,除非后面跟有“ $”,“`”或“ \”(美元符号,反引号,反斜杠)。(...)

使用该$(command)格式,在开括号后到匹配的闭括号后的所有字符均构成命令。可以将任何有效的Shell脚本用于命令,但仅由重定向组成的脚本会产生未指定的结果。

而且从bash手册页中可以更明确地看到:

当使用旧式的反引号形式的替换时,反斜杠保留其字面意思,除非后面跟$,`或\。没有反斜杠的第一个反引号将终止命令替换。使用$(command)表格时,括号之间的所有字符组成命令;没有一个被特别对待。

所以最简单的方法是使用

replications=$(sudo -H -u hadoop bash -c "/home/hadoop/hadoop-install/bin/hadoop dfsadmin -report | grep 'Under replicated blocks' | awk '{print \$4}'")

replications=`sudo -H -u hadoop bash -c "/home/hadoop/hadoop-install/bin/hadoop dfsadmin -report | grep 'Under replicated blocks' | awk '{print \\\$4}'"`

也可以。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章