我有/ 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的文件 奴隶*转到一个名为奴隶的文件 至少会有namenode和0个或更多个slave。 什么是解析bash中提到的文件最简单的方法,并将部分写入所提到的各个部分(主人和奴隶)?我可以在Python中轻松完成,但我需要在bash中完成它。大师看起来像:
<ipaddress1>
<ipaddress2>
而奴隶就像:
<ipaddress3>
<ipaddress4>
它是两个只包含IP地址的文件,而不是机器的名称...原因是如果机器的名称存在,Hadoop将无法工作。
如何使用awk
或bash
完成该操作?我有以下命令:
awk '/namenode/{print >"masters"; next} /slave[0-9]/{print > "slaves"}' /etc/hosts
但是这会使机器名称保持...
答案 0 :(得分:2)
以下是使用awk
:
awk '
$2~/namenode/ { print $1 > "masters" }
$2~/slave/ { print $1 > "slaves"}
' /etc/hosts