2

私はgraphVizでグラフを作成していますが、すべての接続を一度だけ表示する必要があります.Linuxコマンドを使用してこの入力を変換するにはどうすればよいですか?

入力

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]

soaa -- bbは等しいのでbb -- aa、削除する必要があります。

sort -k1,2 -u -t[ボットを試してみましたが、[区切り文字では機能せず、「逆」エントリ (「xx -- yy」 = 「yy -- xx」) をチェックする方法がわかりません。

4

3 に答える 3

4

を使用した方法は次のawkとおりです。

$ awk -F'[[]| -- ' '!a[$1,$2]++&&!a[$2,$1]' file
aa -- bb[label=xyz]
ab -- bb[label=yzx]
ac -- ab[label=xyz]
于 2013-03-27T16:26:12.817 に答える
0

ここに1つのアイデアがあります(テストされていませんが、近いはずです):

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、どのペアがどちらの順序で表示されたかを追跡し、まだ表示されていない場合にのみ出力します。

于 2013-03-27T16:38:11.723 に答える
0

[ を区切り文字として次のように指定できます。

sort -k2 -u -t'['

それはあなたが必要とするものをあなたに与えますか?

于 2013-03-27T16:14:46.397 に答える