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

때때로 이 라인에는 두 번째 호스트가 없습니다.

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

관련 정보