我想在一行上匹配两个变量,并找出有多少个唯一变量

时间:2013-10-14 21:26:48

标签: bash sed awk grep

我有像这样的GraphViz文件

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

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

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做到这一点......无论什么效果最好

1 个答案:

答案 0 :(得分:3)

据我所知,使用和跳过重复的哈希:

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

它产生:

4

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

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