Eu tenho um desafio para pegar um arquivo de saída ("inventory.list") neste formato:
hostname1.env1.domain | abc | environment1
hostname2.env1.domain | abc | environment1
hostname3.env2.domain | abc | environment2
hostname4.env2.domain | abc | environment2
hostname5.env1.domain | def | environment1
hostname6.env2.domain | def | environment2
(6 rows)
e escreva em outro arquivo em um formato diferente:
[abc.environment1]
hostname1.env1.domain
hostname2.env1.domain
[abc.environment2]
hostname3.env2.domain
hostname4.env2.domain
[def.environment1]
hostname5.env1.domain
[def.environment2]
hostname6.env2.domain
abc
e def
são funções atribuídas a servidores e pode haver vários servidores para cada função, bem como funções com o mesmo nome, mas em ambientes diferentes. Eu tenho que dividir cada nome de host em grupos exclusivos de [role.environment] e, adicionalmente, excluir completamente a linha final do arquivo que é uma contagem de linha (este arquivo é uma saída de uma consulta sql).
Eu posso ler o arquivo, remover os canais e os espaços em branco e atribuir / exibir os agrupamentos de função / ambiente, sem problemas:
#! /bin/bash
while IFS='| ' read -r certname role env; do
printf '%s\n' "[""$role"".""$env""]"
done < "/tmp/inventory.list"
... que me fornece os nomes dos grupos de papéis / ambientes:
[abc.environment1]
[abc.environment2]
[def.environment1]
[def.environment2]
mas não consigo descobrir como imprimir os nomes de host vinculados a cada grupo de função / ambiente abaixo do nome de cada grupo, nem posso descobrir como fazer com que meu script ignore a linha de contagem da última linha. Eu estou supondo que eu tenho que atribuir ainda mais o meu papel e campos de ambiente (segundo e terceiro campos) para sua própria matriz para, em seguida, referir a ele para pegar os nomes de host ligados a cada agrupamento exclusivo, mas não tenho idéia de como conseguir isso. Alguém pode aconselhar, por favor?