Bashで配列の行を切り取るかAwkを保存する

Bashで配列の行を切り取るかAwkを保存する

.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"
)

関連情報