構造化リストをコマンドラインに印刷する(ツリー型)

構造化リストをコマンドラインに印刷する(ツリー型)

次の構造化リストを含むテキストファイルがある場合:

#linux
##audio
###sequenzer
####qtractor
###drummachine
####hydrogen

##scores
###lilypond
###musescore

##bureau
###kalender
####calcurse
###todo
####tudu

treeコマンドラインのようにどのように印刷できますか?

linux/
├── audio
│   ├── drummachine
│   │   └── hydrogen
│   └── sequenzer
│       └── qtractor
├── bureau
│   ├── kalender
│   │   └── calcurse
│   └── todo
│       └── tudu
└── scores
    ├── lilypond
    └── musescore

アプリはありませんか?

ベストアンサー1

awk構造を「一般」パスに変換するために使用されます。

linux/
linux/audio/
linux/audio/sequenzer/
linux/audio/sequenzer/qtractor/
linux/audio/drummachine/
linux/audio/drummachine/hydrogen/
...

その後、以下を使用して読むことができますtree --fromfile .


convert_structure.awk:

{
    delete path_arr
    path = ""
    level=match($0,/[^#]/)-1
    sub(/^#*/,"")
    p[level]=$0
    for (l=1;l<=level;l++) {
        path_arr[l]=p[l]
        path = path p[l] "/"
    }
    print path
}

走る:

awk -f convert_structure.awk structure.txt | tree --fromfile . --noreport

出力:

.
└── linux
    ├── audio
    │   ├── drummachine
    │   │   └── hydrogen
    │   └── sequenzer
    │       └── qtractor
    ├── bureau
    │   ├── kalender
    │   │   └── calcurse
    │   └── todo
    │       └── tudu
    └── scores
        ├── lilypond
        └── musescore

ノート:

  • 確認するここ実装が配列をawkサポートしていない場合delete

  • これはスペースを含むパスでは機能しますが、改行文字を含むパスでは機能しないようです。

おすすめ記事