我在graphViz中创建图形,我需要每个连接只显示一次,如何使用linux命令转换此输入?
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[
僵尸程序,它与[
分隔符不起作用,并且不知道如何检查“反向”条目(“xx - yy”=“yy - xx”)< / p>
答案 0 :(得分:4)
以下是使用awk
的方法:
$ awk -F'[[]| -- ' '!a[$1,$2]++&&!a[$2,$1]' file
aa -- bb[label=xyz]
ab -- bb[label=yzx]
ac -- ab[label=xyz]
答案 1 :(得分:0)
您可以通过这种方式指定[作为分隔符:
sort -k2 -u -t'['
这能满足您的需求吗?
答案 2 :(得分:0)
这是一个想法(未经测试,但应该接近):
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 ...
位删除--
和[label...]
部分,因为您似乎并不关心它们,然后awk
会跟踪哪些配对已经看过任何一种顺序,只有在尚未看到它们时才打印出来。