複雑な階層を把握するには?

複雑な階層を把握するには?

ファイルがあります:-

start apple
1 a
2 b
3 c
start orange
4 a
5 b
start mango
1 a
start a/b/c
5 z
end
4 b
end
6 c
end
start banana
3 c
end
4 d
5 e
end

私は出力を次のようにしたい:-

1 apple/a
2 apple/b
3 apple/c
4 apple/orange/a
5 apple/orange/b
1 apple/orange/mango/a
5 apple/orange/mango/a/b/c/z
4 apple/orange/mango/b
6 apple/orange/c
3 apple/banana/c
4 apple/d
5 apple/e

私は数字の階層を把握する最速の方法が欲しい。

ベストアンサー1

一般的なawk作業:

awk '$1 == "start" {d[++n] = $2; next}
     $1 == "end" {n--; next}
     {
       printf "%s ", $1
       for(i=1;i<=n;i++) printf "%s/",d[i]
       print $2
     }'

(Solarisでは、/usr/xpg4/bin/awkまたはこれが必要になる場合がありますnawk)。

次の方法で行うこともできますsed

sed '/^start /{s///;x;G;s/\n//;s:$:|:;h;d;}
     /^end/{g;s:[^|]*|$::;h;d;}
     G;s/ \(.*\)\n\(.*\)/ \2\1/;y:|:/:'

(これはパスに|文字がないと仮定します。)

おすすめ記事