구조화된 목록을 명령줄에 인쇄(트리형)

구조화된 목록을 명령줄에 인쇄(트리형)

다음과 같은 구조화된 목록이 포함된 텍스트 파일이 있는 경우:

#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.

  • 이는 공백이 포함된 경로에서는 작동하지만 개행 문자가 포함된 경로에서는 작동하지 않는 것 같습니다.

관련 정보