将结构化列表打印到命令行(树状)

将结构化列表打印到命令行(树状)

如果我有一个带有如下结构化列表的文本文件:

#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数组。

  • 这适用于包含空格的路径,但显然不适用于包含换行符的路径。

相关内容