다음과 같은 구조화된 목록이 포함된 텍스트 파일이 있는 경우:
#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
.이는 공백이 포함된 경로에서는 작동하지만 개행 문자가 포함된 경로에서는 작동하지 않는 것 같습니다.