获得独特的线条

时间:2013-03-27 16:10:18

标签: linux bash awk unique delimiter

我在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>

3 个答案:

答案 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会跟踪哪些配对已经看过任何一种顺序,只有在尚未看到它们时才打印出来。