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の解析と書き込み機能もあります。