Bashを使用して列ベースのテキストファイルをツリー構造にフォーマットする

Bashを使用して列ベースのテキストファイルをツリー構造にフォーマットする

これを変更できるUnix / Linuxコマンドはありますか?

AMERICA USA NEW_YORK    AB-100
AMERICA USA NEW_YORK    VF-200
AMERICA USA NEW_YORK    XY-243
AMERICA USA LOS_ANGELES UH-198
AMERICA CANADA  TORONTO UT-876
AMERICA CANADA  TORONTO UT-877
AMERICA CANADA  VANCOUVER   UT-871
AMERICA CANADA  VANCOUVER   UT-872
AMERICA CANADA  VANCOUVER   UT-873
AMERICA MEXICO  MEXICO  OU-098
AMERICA MEXICO  MONTERREY   OU-099
AMERICA MEXICO  MONTERREY   OU-100
EUROPE  FRANCE  PARIS   IV-122
EUROPE  FRANCE  PARIS   AV-112
EUROPE  FRANCE  PARIS   IF-111
EUROPE  FRANCE  PARIS   XX-190
EUROPE  FRANCE  TOULOUSE    TL-654

以下を入力してください:

AMERICA
    USA
        NEW_YORK
            AB-100
            VF-200
            XY-243
        LOS_ANGELES
            UH-198
    CANADA  
        TORONTO 
            UT-876
            UT-877
        VANCOUVER
            UT-871
            UT-872
            UT-873
    MEXICO  
        MEXICO  
            OU-098
        MONTERREY
            OU-099
            OU-100
EUROPE
    FRANCE
        PARIS
            IV-122
            AV-112
            IF-111
            XX-190
        TOULOUSE
            TL-654

ベストアンサー1

あなたの例:

dir=$(mktemp -d)
sed 's|\t|/|g' file | while read -r line; do mkdir -p "$dir/$line"; done
(cd "$dir"; tree)
rm -r "$dir"

出力:


アメリカ
│ ├──カナダ
│ │ ├── トロント
│ │ │ ├── UT-876
│ │ │ └── UT-877
│ │ └── バンクーバー
│ │ ├── UT-871
│ │ ├── UT-872
│ │ └── UT-873
│ ├── メキシコ
│ │ ├── メキシコ
│ │ │ └── OU-098
│ │ └── モントレー
│ │ ├── OU-099
│ │ └── OU-100
アメリカ
│ ├── LOS_ANGELES
│ │ └── UH-198
│ └── ニューヨーク
│ ├── AB-100
│ ├── VF-200
│ └── XY-243
└──ヨーロッパ
    └──フランス
        ├──パリ
        │ ├── AV-112
        │ ├── IF-111
        │ ├── IV-122
        │ └── XX-190
        └── トゥールーズ
            └── TL-654

おすすめ記事