如何从主机文件中只获取ip-address?巴什

时间:2014-05-03 18:54:27

标签: python linux bash hadoop awk

我有/ 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将无法工作。 如何使用awkbash完成该操作?我有以下命令:

awk '/namenode/{print >"masters"; next} /slave[0-9]/{print > "slaves"}' /etc/hosts

但是这会使机器名称保持...

1 个答案:

答案 0 :(得分:2)

以下是使用awk

进行此操作的一种方法
awk '
$2~/namenode/ { print $1 > "masters" } 
$2~/slave/ { print $1 > "slaves"}
' /etc/hosts