我在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
跟踪哪个对以任意顺序出现,只有在他们还没有看到。