2カラムのデータを階層関係に変換する

2カラムの関係性を階層関係に変換するには、
次のような階層構造を摘出


$cat outputHierarchy.sh
awk -F ',' '{
  parent[$2]=$1 # 親子関係を逆にして親をキーとして格納
}
END{
  for(node in parent) { # 全てのノードをループ
    path=node # ノードからスタート
    while(parent[node]){ # 親が存在する限りループ
      node=parent[node] # 親に移動
      path=node "/" path # 親の名前をパスに追加
    }
    print path # 最終的なパスを出力
  }
}' $1 | sort -n
$

$ cat input.txt
A,B1
B1,C1
B1,D1
D1,D2
D2,D3
D3,D4
B5,D5
B6,D6
B7,D7
B8,D8
B9,D9
B10,D10
B11,D11
B12,D12
B13,D13
B14,D14
B15,D15
B16,D16
B17,D17
B18,D18
B19,D19
B20,D20
$


$ bash outputHierarchy.sh  input.txt
A/B1
A/B1/C1
A/B1/D1
A/B1/D1/D2
A/B1/D1/D2/D3
A/B1/D1/D2/D3/D4
B10/D10
B11/D11
B12/D12
B13/D13
B14/D14
B15/D15
B16/D16
B17/D17
B18/D18
B19/D19
B20/D20
B5/D5
B6/D6
B7/D7
B8/D8
B9/D9
$

この記事が気に入ったらサポートをしてみませんか?