I have a collection of digraphs encoded in DOT language, and i want to merge them into a single digraph where nodes with the same name in different input graphs are merged together.
For example given the following files:
1.dot
:
digraph {
A -> B
A -> C
}
2.dot
:
digraph {
D -> E
E -> F
}
3.dot
:
digraph {
D -> G
G -> A
}
I would like to obtain the following result.dot
:
digraph {
subgraph {
A -> B
A -> C
}
subgraph {
D -> E
E -> F
}
subgraph {
D -> G
G -> A
}
}
I tried to use gvpack
but it renames duplicate nodes.
> gvpack -u 1.dot 2.dot 3.dot
Warning: node D in graph[2] %15 already defined
Some nodes will be renamed.
digraph root {
node [label="\N"];
{
node [label="\N"];
A -> B;
A -> C;
}
{
node [label="\N"];
D -> E;
E -> F;
}
{
node [label="\N"];
D_gv1 -> G;
G -> A_gv1;
}
}
I found a similar question on SO that suggest using sed
to rename the renamed nodes, but that doesn't seem very clean.
Is there a way to merge the graphs the way i would like them?