Estou assumindo que cada usuário aparece
no arquivo de entrada (na coluna "Usuário") apenas uma vez.
Além disso, suponho que os separadores da barra vertical ( |
)
estão realmente no arquivo,
e que eles são sempre separados dos dados por espaço em branco,
e que a linha de cabeçalho não está presente .
Veja uma solução de duas etapas usando awk
.
O primeiro passo cria um array contendo o supervisor de todos;
o segundo passo constrói a saída:
awk 'pass==1 { super[$1] = $3; }
pass==2 {
print
user=$3
while (super[user] != "") {
print $1, "|", super[user], "|", $5
user=super[user]
}
}
' pass=1 data pass=2 data
Isso produzirá resultados que não estão alinhados corretamente.
Para corrigir isso, canalize-o em column -t
.
Ou podemos formatar a saída de dentro do script awk
;
se você quiser, especifique as regras de formatação desejadas.
A propósito, esta operação é geralmente conhecida como encerramento transitivo .