.txtファイルの行を配列に入れる必要があるシナリオがあります。ファイル内容の例です。
type of host
|
| first host
| |
| | second host
| | |
| | | same ip address
| | | |
HOST_A_B=192.168.0.1
bashの配列に入れる必要があります
#echo $Array[0]
HOST_A=192.168.0.1
#echo $Array[1]
HOST_B=192.168.0.1
時々、この行には2番目のホストはありません。
HOST_A_B=192.168.0.1
HOST_C=192.168.0.2
HOST_DEF_G=192.168.0.3
echoコマンドの出力は次のようになります。
#echo $Array[1]
HOST_A=192.168.0.1
#echo $Array[2]
HOST_B=192.168.0.1
#echo $Array[3]
HOST_C=192.168.0.2
#echo $Array[4]
HOST_DEF=192.168.0.3
#echo $Array[5]
HOST_G=192.168.0.3
どんなアイデアがありますか?
答え1
次のように見えます。
readarray -t array < <(
awk '
match($0, /^HOST_[^=]+=/) {
host = substr($0, 1, RLENGTH - 1)
ip = substr($0, RLENGTH)
n = split(host, hosts, "_")
for (i = 2; i <= n; i++) print "HOST_"hosts[i] ip
}' < your-file
)
サンプルでは、以下を提供します。
$ typeset -p array
declare -a array=(
[0]="HOST_A=192.168.0.1"
[1]="HOST_B=192.168.0.1"
[2]="HOST_C=192.168.0.2"
[3]="HOST_DEF=192.168.0.3"
[4]="HOST_G=192.168.0.3"
)