Как получить значения между несколькими разделенными полями - PullRequest
2 голосов
/ 10 мая 2019

Я ищу, чтобы извлечь имя хоста и IP-адрес из каждой строки в файле данных, имя хоста будет извлечено из cn=mykosts001 т.е. mykosts001 и IP-адрес ipHostNumber=192.168.18.118 т.е. 192.168.18.118.

Ниже приведен файл, содержащий данные ..

$ cat hosts.tx
dn: cn=mykosts001+ipHostNumber=192.168.18.118,ou=hosts,ou=corp,ou=services,o=rocks.com

dn: cn=mykosts002+ipHostNumber=192.168.18.119,ou=hosts,ou=corp,ou=services,o=rocks.com

dn: cn=mykosts003+ipHostNumber=192.168.18.120,ou=hosts,ou=corp,ou=services,o=rocks.com

dn: cn=mykosts004+ipHostNumber=192.168.18.121,ou=hosts,ou=corp,ou=services,o=rocks.com

EDIT:

dn: cn=mykosts005+ipHostNumber=192.168.18.122,ou=hosts,ou=corp,ou=services,
 o=rocks.com

для отредактированной выше строки, в этом случае, когда o=rocks.com подходит к другой строке, она также печатает rocks.com, как это происходит после =.

Что я пробовал:

$ cat hosts.tx | sed '/^$/d' | cut -d"=" -f2-3
mykosts001+ipHostNumber=192.168.18.118,ou
mykosts002+ipHostNumber=192.168.18.119,ou
mykosts003+ipHostNumber=192.168.18.120,ou
mykosts004+ipHostNumber=192.168.18.121,ou

Я попробовал выше, но не понял, как получить имя хоста и IP.

Желаемый вывод:

mykosts001 192.168.18.118
mykosts002 192.168.18.119
mykosts003 192.168.18.120
mykosts004 192.168.18.121

1 Ответ

2 голосов
/ 10 мая 2019
$ awk -F'[=+,]' '/^dn:/{print $2, $4}' file
mykosts001 192.168.18.118
mykosts002 192.168.18.119
mykosts003 192.168.18.120
mykosts004 192.168.18.121
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...