获取独特的线条

我在graphViz中创buildgraphics,我需要每个连接只显示一次,如何使用linux命令来转换此input?

INPUT

aa -- bb[label=xyz] ab -- bb[label=yzx] aa -- bb[label=zxy] ac -- ab[label=xyz] bb -- aa[label=xzy] 

期望的输出:

 aa -- bb[label=xyz] ab -- bb[label=yzx] ac -- ab[label=xyz] 

所以aa -- bb等于bb -- aa ,需要删除。

我试过sort -k1,2 -u -t[ bot它没有与[分隔符工作,不知道如何检查“反向”条目(“XX – YY”=“YY – XX”))

这是一个使用awk的方法:

 $ awk -F'[[]| -- ' '!a[$1,$2]++&&!a[$2,$1]' file aa -- bb[label=xyz] ab -- bb[label=yzx] ac -- ab[label=xyz] 

你可以通过这种方式指定[作为分隔符:

 sort -k2 -u -t'[' 

这是否给你你所需要的?

这里有一个想法(未经测试,但应该接近):

 sed -e 's/[[].*// -e 's/-- //' input.txt | awk '{ if ((e[$1$2] != 1) && (e[$2$1] != 1)) { print $1, $2 e[$1$2] = e[$2$1] = 1 } }' 

sed ... bit去掉了--[label...]部分,因为你似乎并不关心它们,那么awk跟踪哪个对以任意顺序出现,只有在他们还没有看到。