- 论坛徽章:
- 1
|
本帖最后由 九方流云 于 2015-12-07 18:28 编辑
大家好,有个文本处理的问题,文本开头部分以-分割,l两个-之间为一个配置部分,但是文本其他部分或许也有-,文本开头部分如下,除了下面的部分,其他部分都没有以-开头:
- storage_address: 10.20.20.130
fqdn: node-10.domain.tld
public_netmask: 255.255.255.0
public_address: x.x.x.x
storage_netmask: 255.255.255.0
uid: "1"
internal_address: x.x.x.x
internal_netmask: 255.255.255.0
role: controller
name: node-10
- storage_address: 1x.x.x.x
fqdn: node-11.domain.tld
public_netmask: 255.255.255.0
public_address: x.x.x.x
storage_netmask: 255.255.255.0
uid: "2"
internal_address: x.x.x.x
internal_netmask: 255.255.255.0
role: compute
name: node-11
- storage_address: x.x.x.x
fqdn: node-12.domain.tld
public_netmask: 255.255.255.0
public_address: x.x.x.x
storage_netmask: 255.255.255.0
uid: "3"
我执行命令如下:
root@node-10:~# awk -vRS='-' '/role: controller/{print $0}' /etc/astute.yaml
10.domain.tld
public_netmask: 255.255.255.0
public_address: x.x.x.x
storage_netmask: 255.255.255.0
uid: "1"
internal_address: x.x.x.x
internal_netmask: 255.255.255.0
role: controller
name: node
但是我执行下面的命令就是RS改为^-,结果除了-分割的部分,不以-分割的部分都打印出来了
root@node-10:~# awk -vRS='^-' ' /role: controller/{print $0}' /etc/astute.yaml
--
storage:
vc_user: ""
vc_host: ""
osd_pool_size: "2"
metadata:
label: Storage
weight: 60
images_ceph: false
iser: false
volumes_ceph: false
volumes_lvm: true
ephemeral_ceph: false
objects_ceph: false
vc_datacenter: ""
volumes_vmdk: false
pg_num: 128
vc_datastore: ""
vc_image_dir: /openstack_glance
我要的被两个-分割的部分中,如果能匹配role: controller,则打印出此部分中的public_address地址:
root@node-10:~# awk -F" +| \n" -vRS='^-' '/role: controller/{for(i=1;i<NF;i++){if($i~/public_address/){print $(i+2);exit}}}' /etc/astute.yaml
x.x.x.x
虽然结果能出来,但是我很疑惑,为啥RS="^-",结果打印了文本所有结果。
PS:表情的地方是冒号和竖线,一直打不上去。
此外我又试验了一下
root@node-10:~# seq 10 |awk -vRS="^1" '{print $0}'
2
3
4
5
6
7
8
9
10
到现在是疑惑重重,希望大神解惑! |
|