如果我有一个带有如下结构化列表的文本文件:
#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
数组。这适用于包含空格的路径,但显然不适用于包含换行符的路径。