我执行以下命令awk
:将值传递给参数 - AWK
egrep '^[0-9]' /etc/hosts | grep -v 127.0.0.1 \
| awk 'NR==1{ips=$1}
NR>1{ips=ips ", " $1}
$2=="namenode"{nn=$1}
END{ printf "/opt/mapr/server/configure.sh -C %s -Z %s -N mycluster --create-user -D /dev/xvdb", ips, nn}'
,并返回正确的输出:
/opt/mapr/server/configure.sh -C 10.224.43.50, 10.40.235.23 -Z 10.40.235.23 -N mycluster --create-user -D /dev/xvdb
现在我变得更聪明,并试图遵循的模式:
egrep '^[0-9]' /etc/hosts | grep -v 127.0.0.1 \
| awk 'NR==1{ips=$1}
NR>1{ips=ips ", " $1}
$2=="namenode"{nn=$1}
END{ printf "/opt/mapr/server/configure.sh -C %s -Z %s -RM %s -HS %s -N mycluster --create-user -D /dev/xvdb", ips, nn, nn, nn}'
就是这样,我添加了两个具有相同值的条目但我没有得到任何回报。这是为什么?
这里是/etc/hosts
样本:
[email protected]:~# cat /etc/hosts
127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
## vagrant-hostmanager-start
10.224.43.50 dgnode dgnode.dg.local
10.40.235.23 namenode namenode.dg.local
## vagrant-hostmanager-end
没有未能从修改后的脚本获得输出的明显原因;你应该得到一些东西,即使它不是你想要的东西。你确定你在正确的文件上运行它吗? 'printf()'末尾都没有换行符;这是你的问题的一个因素?根据您提供的hosts文件运行脚本(不使用我的'/ etc/hosts')会得到合理的结果。 – 2015-04-06 03:24:21