
次の構造化リストを含むテキストファイルがある場合:
#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
。これはスペースを含むパスでは機能しますが、改行文字を含むパスでは機能しないようです。