1

我有一个像这样的 GraphViz 文件

graph {
    edge [arrowhead = none]
    A -> B
    B -> C
    B -> D  [ label="foobar" ];
    C -> A
}

我想知道有多少个节点,例如在这种情况下(A,B,C,D) 4. 当我坚持使用 1 个字母节点时,我使用这样的脚本

grep -- -\> graph.gv | grep -o . | sort | grep [A-Z] | uniq | wc -l

但如果我需要使用多字母节点,那将失败。

理想情况下,我会有一些匹配的东西

match $a -> $b ; echo $a\n $b\n | uniq | wc -l

但我不知道如何通过 sed/grep/awk 来做到这一点……无论哪种效果最好

4

1 回答 1

3

据我了解,将与跳过重复项的哈希一起使用:

awk '{ arr[$1]++; arr[$3]++ } END { print length(arr) }' infile

它产生:

4

更新:在中有一个模式部分,可让您选择一个条件来处理该行。正如我在您的编辑中看到的,可能与花括号不匹配,例如:

awk '$0 !~ /[{}]/ { arr[$1]++; arr[$3]++ } END { print length(arr) }' infile
于 2013-10-14T21:30:58.673 回答