如何仅从hosts文件中获取IP地址?Bash
我有一个 /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
<ipaddress1> namenode
<ipaddress2> secondarynamenode
<ipaddress3> slave1
<ipaddress4> slave2
< it can be more slave nodes here>
## vagrant-hostmanager-end
现在我正在配置一个 Hadoop 集群,我需要把 /etc/hosts 文件分成以下的格式:
主节点(namenode)和备用节点(secondarynamenode)要放到一个叫做 masters 的文件里,其他的从节点(slaves)要放到一个叫做 slaves 的文件里。至少会有一个主节点,可能会有零个或多个从节点。
我想知道在 bash 中,最简单的方法是什么,来解析这个文件并把内容写入到相应的文件(masters 和 slaves)里?我用 Python 可以很简单做到,但我需要用 bash 来完成。masters 文件的内容会像这样:
<ipaddress1>
<ipaddress2>
而 slaves 文件的内容会像这样:
<ipaddress3>
<ipaddress4>
就这样,两个文件里只包含 IP 地址,而不包含机器的名字……这样做的原因是,如果机器的名字在里面,Hadoop 就无法正常工作。
我该如何使用 awk
或 bash
来实现这个?我有以下这个命令:
awk '/namenode/{print >"masters"; next} /slave[0-9]/{print > "slaves"}' /etc/hosts
但这个命令会保留机器的名字……
1 个回答
2
这里有一种使用 awk
的方法:
awk '
$2~/namenode/ { print $1 > "masters" }
$2~/slave/ { print $1 > "slaves"}
' /etc/hosts