Попытка извлечь шаблон, используя awk substr, но я не знаю, как удалить символ новой строки.Я пытаюсь получить overcloud-Controller-x
| driver_info | {u'ipmi_password': u'******', u'ipmi_address':
u'10.x.x.x', u'deploy_ramdisk': u'de76fe92-8b1f-409b-ab9c-f50232c44f0b',
u'deploy_kernel': u'cb9c373e-c733-423a-a7a3-6a19b65b7d32',
u'ipmi_username': u'xxx'}
|
| instance_info | {u'root_gb': u'40', u'display_name':
u'overcloud-Controller-1', u'image_source': u'ea293064-cbbc-4635-9d5f-
50b91c8b20c0', u'capabilities': u'{"profile": "Controller", "boot_option":
"local"}', u'memory_mb': u'6144', u'vcpus': u'4', u'local_gb': u'837',
u'configdrive': u'******', u'swap_mb': u'0'} |
| name | server-1
| driver_info | {u'ipmi_password': u'******', u'ipmi_address':
u'10.x.x.y', u'deploy_ramdisk': u'de76fe92-8b1f-409b-ab9c-f50232c44f0b',
u'deploy_kernel': u'cb9c373e-c733-423a-a7a3-6a19b65b7d32',
u'ipmi_username': u'xxx'}
|
| instance_info | {u'root_gb': u'40', u'display_name':
u'overcloud-Controller-2', u'image_source': u'ea293064-cbbc-4635-9d5f-
50b91c8b20c0', u'capabilities': u'{"profile": "Controller", "boot_option":
"local"}', u'memory_mb': u'6144', u'vcpus': u'4', u'local_gb': u'837',
u'configdrive': u'******', u'swap_mb': u'0'} |
| name | server-2
, когда я запускаю следующий скрипт awk, всегда есть перевод строки.
awk '{match($0,/display_name/); nodename=substr($0,RSTART+17, RLENGTH+10); gsub(/ /, "",nodename);printf "(%s)\n",nodename}' alex-test.txt
Вывод:
(overcloud-Controller-1)
()
()
()
(overcloud-Controller-2)
()
()
Посоветуйте, пожалуйста, как удалить перевод строки?я использую tr -d '\ n' в конце, но он удалил всю новую строку, чтобы он стал одной строкой.
(overcloud-Controller-1)()()()(overcloud-Controller-2)()()
Ожидаемый вывод:
(overcloud-Controller-1)
(overcloud-Controller-2)
Почему я напечатал дополнительный перевод строки?Любой совет?кажется, printf напечатал и перевод строки.если я напечатаю только переменную nodename, то это также разрешит мой вопрос.
мои реальные данные - всего 3 строки, а затем парсер для сервера-2
| driver_info | {u'ipmi_password'
| instance_info | {u'root_gb': u'40
| name | server-1
Обновите скрипт и начните работатьоснованный на идее @ RavainderSing13.Я просто добавил RS и FS перед awk, вот и все.Спасибо.
awk -v RS="" -v FS="[|\n]" '{match($0,/display_name/);
nodename=substr($0,RSTART+17, RLENGTH+10); gsub(/ /, "",nodename);;printf
"(%s)\n",nodename}' ava-ipmi.txt
(overcloud-Controller-2)
(overcloud-Controller-0)
(overcloud-Controller-1)