2013-03-27 74 views
2

我在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[ BOT它沒有與[分隔符的工作,不知道如何檢查 「反向」 條目( 「XX - YY」= 「YY - ××」)

回答

4

下面是使用awk的方法:

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

+1,這個好球 – 2013-03-27 16:32:30

0

可以specifify [作爲分隔符這種方式:

sort -k2 -u -t'[' 

這是否給你你需要什麼?

+0

這是行不通的,因爲它沒有把'AA - bb'和'BB - aa'相等。 – 2013-03-27 16:20:24

+0

確定。需要更多思考。 – SteveP 2013-03-27 16:23:04

+0

我嘗試了太多,但排序不接受任何「特殊」的字符,除了字母數字字符分隔符這樣 – Buksy 2013-03-27 16:23:54

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跟蹤哪些對已經看到了無論是爲了只打印他們,如果他們沒有見過的。

+1

這將是很難比[sudo_O響應(HTTP簡單和更清潔:/ /stackoverflow.com/a/15664062/465183)=) – 2013-03-27 17:05:41