В настоящее время у меня есть команда, которая выводит данные в следующем формате:Объединить и манипулировать древовидную структуру в Баш
apple: banana
apple: cantaloupe
apple: durian
apple: eggplant
banana: cantaloupe
banana: durian
durian: eggplant
eggplant:
Другими словами, это древовидная структура, в которой apple
является корнем, которое имеет детей banana
и eggplant
, и banana
также имеет детей младшего возраста cantaloupe
и durian
. eggplant
не имеет детей, но все еще имеет заднюю кишку.
Я хочу, чтобы сцепить выход в этот формат:
apple: banana eggplant
banana: cantaloupe durian
durian: eggplant
eggplant:
Некоторые объекты могут появиться более чем один раз на выходе (в данном случае, cantaloupe
, durian
и eggplant
имеют несколько родительских узлов). В то время как этот пример не имеет этого, также могут быть несколько корневых узлов (т. Е. Такой же ширины, как apple
).
Как я могу изменить этот выход? Я использую bash/shell-скрипты в целом прямо сейчас, поэтому я думал, что awk
, вероятно, будет лучшим способом справиться с этим, но если это лучше обрабатывается на Python, Ruby, Perl или на каком-то другом языке сценариев, я также открыт для предложений.
Ваше описание «tree- как «структура», скорее звучит как DAG (Directized acyclic graph). Инструмент 'make' использует эти внутренние функции, а' tsort' из стандартного инструментария unix может выполнять топологическую сортировку для вас. – liborm
Вы знаете, это забавно, что вы вызываете 'make', потому что я на самом деле пытаюсь построить дерево зависимостей' make' целей! Результат ниже работает для меня, хотя, но спасибо за подсказку на 'tsort' - никогда не слышал об этом раньше. –
Эй, честно говоря, это вопрос хамелеона! Задайте вопрос, на который вы хотите ответить. Не изменяйте его постепенно. Лучше спросить новый вопрос, если вы обнаружите, что на ваш оригинал был дан ответ, но на самом деле вы этого не хотели. –