Text-Processing

將結構化列表列印到命令行(樹狀)

  • February 4, 2022

如果我有一個帶有這樣的結構化列表的文本文件:

#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

有沒有我錯過的應用程序?

用於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
  • 這適用於包含空格的路徑,但顯然不適用於包含換行符的路徑。

引用自:https://unix.stackexchange.com/questions/689218