Я пытаюсь проанализировать файл, который содержит строки в иерархической структуре.Например, файл:
a b c
a b d
a B C
A B C
указывает, что a
содержит b
и B
, что b
содержит c
и d
, что B
содержит C
.A
содержит другой B
, который содержит свой собственный C
.
Это очень похоже на список файлов.
Я хочу отформатировать это иерархически в скобках, например:
a {
b {
c
d
}
B {
C
}
}
A {
B {
C
}
}
Я не смог придумать достойного способа сделать это.Я думал, что AWK будет моей лучшей ставкой, но не смог понять, как это реализовать.
Context
Мой ввод - это фактически список файлов.Я могу, конечно, при необходимости разделить поля пробелами или оставить их с помощью /
.Файлы неупорядочены и генерируются из кодовой базы во время компиляции посредством проверки.Мой желаемый вывод будет DOT-файл graphviz, содержащий каждый файл в своем собственном подграфе.
Таким образом, для ввода:
a/b/c
a/b/d
a/B/C
A/B/C
вывод будет
digraph {
subgraph cluster_a {
label = a
subgraph cluster_b {
label = b
node_1 [label=c]
node_2 [label=d]
}
subgraph cluster_B {
label = B
node_3 [label=C]
}
}
subgraph cluster_A {
label = A
subgraph cluster_B {
label = B
node_4 [label=C]
}
}
}
Кто-нибудь знает, как я мог выполнить эту обработку?Я открыт и для других инструментов, не только для AWK.
ПРИМЕЧАНИЕ. Глубина не фиксирована, хотя я мог бы предварительно рассчитать максимальную глубину, если это необходимо.Не все листья также будут на одной глубине.