結果:

結果:

2つのファイルがあります。

ファイル1:スイッチのインターフェイス数のリストは次のとおりです。

1/1
1/2
1/3
1/4
1/5
.
.

ファイル2:VLAN-ID, VLAN-NAME, InterfacesこのVLANに属するものが含まれています。

1,"vlan-wifi",1/1,1/7,1/8
2,"vlan-admin",1/3,1/5,1/6
3," " ,3/3,1/3

たとえば、次のファイルを使用してテーブルを作成しようとします。

                    |   interface Switch
VLAN-ID | VLAN-NAME |1/1|1/2|1/3|1/4|1/5|1/6|1/7|1/8|1/9|1/10|...|3/3
    1   |  vlan-wifi| * |   |   |   |   |   | * | * |   |    |   |
    2   | vlan-admin|   |   | * |   | * | * |   |   |   |    |   |
    3   |           |   |   | * |   |   |   |   |   |   |    |   | *

この目標をどのように達成できますか?

ベストアンサー1

テキストを処理するためにシェルループを使用したくありません。。以下は一般的な作業ですawk

awk -F '"? *, *"?' '
   !ports_processed {
      port[++ports] = $0; width[ports] = length; next
   }
   FNR==1 {
     printf "                    |   interface Switch\nVLAN-ID | VLAN-NAME "
     for (i = 1; i <= ports; i++) printf "|%s", port[i]
     print ""
   }
   {
     printf "%6d  |%11s", $1, $2
     split("", member)
     for (i = 3; i <= NF; i++) member[$i]
     for (i = 1; i <= ports; i++)
       printf "| %*s", 1 - width[i], (port[i] in member ? "*" : " ")
     print ""
   }' file-1 ports_processed=1 file-2

(これは、VLAN名にカンマ、二重引用符、または改行文字が含まれていないと仮定します(可能であればエンコード方法を知る必要があります)。)

多次元配列をサポートするシェルに関するこのトピックの質問に答えるには、を参照してくださいksh93。 csvの解析と書き込み機能もあります。

おすすめ記事