printfを使用した配列出力の書式設定

printfを使用した配列出力の書式設定

各ネットワークカードの詳細を含む配列があります。各配列インデックスは、スペースで区切られた3つの値で構成されています。

出力で素敵なテーブルが欲しいです。インデックスの各値に型パターンを割り当てる方法はありますか?

これまでこれが私が使っているものです:

NIC_details[0]='wlp2s0 192.168.1.221 xx:xx:xx:xx:xx:xx'
NIC_details[1]='wwan0 none xx:xx:xx:xx:xx:xx'
NIC_details[2]='virbr0 192.168.122.1 00:00:00:00:00:00'

printf "%-20s\n" "${NIC_details[@]}"

$ 1、$ 2、$ 3の位置で配列インデックスの値にアクセスし、それらの値がスペースで区切られていることを知り、各$ Xの場所に書式設定パターンを適用する方法はありますか?

私も試しました

echo "$i" | column -t

しかし、望む結果は得られませんでした。

ベストアンサー1

すでに実行しているタスクを少し変更すると、次のようになります。

set -f # to prevent filename expansion
for i in ${!NIC_index[@]}
do
  printf "%-20s" ${NIC_details[i]}
  printf "\n"
done

forすべての配列インデックスを繰り返すためにループを追加しました${!NIC...。これが構文です。数値配列なので、インデックスを直接繰り返すこともできます。

ちなみに私はわざわざ出ました。${NIC_details[i]} 引用しないこれにより、シェルは値を区切るために使用されるスペースに値を分割します。printfしたがって、3つの値が表示され、各値に対して%-20s形式を繰り返します。その後、各ネットワークカードの後に​​改行文字を追加して素晴らしいテーブルを作成しました。

set -f変数の引用を解除すると、一番上の変数が重要です。それ以外の場合は、シェルが介入して試みます。全体的な状況引用符のない変数に表示されるワイルドカード。

出力例:

wlp2s0              192.168.1.221       xx:xx:xx:xx:xx:xx
wwan0               none                xx:xx:xx:xx:xx:xx
virbr0              192.168.122.1       00:00:00:00:00:00

おすすめ記事