我使用 Graphviz 和
dot
生成了一个仅包含单向边的有向图。 我想知道一种将节点和边减少到仅指定节点所需的节点和边的方法。 例如,给定这个点文件:
A->B
B->C
C->D
我想要一个专注于节点 B 的 shell 命令,这样结果输出如下所示:
B->C
C->D
作为参考,我将其用作将 json 中的应用程序依赖项列表转换为点的项目的一部分,并且希望在生成图表时能够专注于单个应用程序的依赖项。
/* based on "cliptree" - part of Graphviz source */
/* Construct subgraph reachable from node ARGV[0] by forward edges */
/**/
/* command line: gvpr -aYourNodeName -cf subgraph.gvpr yourFile.gv |dot -Tpng ... */
/* escape any whitespace characters in the node name with a backslash */
BEGIN {
int edgeDel[], nodeDel[];
obj_t obj;
}
// mark all nodes & edges for deletion
N{nodeDel[$]=0;}
E{edgeDel[$]=0;}
// traverse again, starting at the desired node
BEG_G{
node_t r = node($,ARGV[0]);
//printf(2,"arg: %s\n", ARGV[0]);
$tvroot = r;
$tvtype = TV_fwd;
}
N{
unset(nodeDel,$);
$tvroot=NULL;
}
E{
unset(edgeDel,$);
}
// delete all edges & nodes not visited by the 2nd travers
END_G{
for (edgeDel[obj]) {
delete($G, obj);
}
for (nodeDel[obj]) {
delete($G, obj);
}
}
命令行:
gvpr -aYourNodeName -cf subgraph.gvpr yourFile.gv |dot -Tpng ...