各NICに関する詳細を含むアレイがあります。各配列インデックスは、スペースで区切られた3つの値で構成されます。
出力としてNiceテーブルを用意したいと思います。インデックスの各値にフォーマットパターンを割り当てる方法はありますか?
これまでのところ、これは私が使用するものです:
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
しかし、それは望ましい結果をもたらしません。
ここでは、すでに行っていた処理を少し変更します。
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]}
unquotedシェルは、値を区切るために使用したスペースで値を分割します。したがって、printf
は3つの値を確認するため、それぞれの値に対して%-20s形式を繰り返します。次に、各NIC=の後に改行を追加して、Niceテーブルを作成します。
set -f
変数を引用符で囲まないままにしておく場合は、上部の重要です。それ以外の場合、シェルはステップインして、引用符で囲まれていない変数に含まれるワイルドカード glob を試みます。
出力例:
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
はい、方法があります。awk
を使用してください。
一例:
echo ${NIC[0]} | awk '{ printf "%-10s %s\n", $1, $2 }'
別の方法は、異なる変数の値を取得し、bashからprintf
を実行することです。お気に入り :
var1=$(echo ${NIC[0]} | cut -d ' ' -f1)
var2=$(echo ${NIC[0]} | cut -d ' ' -f2)
var3=$(echo ${NIC[0]} | cut -d ' ' -f3)
そして、printf
を$ var1,2,3とともに使用します。