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