반응형
쉘 스크립트 파일 2개를 불러와 key-value 형태로 변환 (bash shell script key-value, bash shell script map)
아래와 같은 파일이 있을 때 쉘 스크립트의 map을 사용하여 key : key1 , value : value1 형태로 출력하는 코드 입니다.
#!/bin/bash
## 파일을 읽어 배열 형태로 저장
key_list=(`cat /root/test1`)
value_list=(`cat /root/test2`)
## 아래 코드 실행 중 길이를 넘어 에러를 발생하므로 key_list, value_list 측정 길이에서 -1
KEY_EXPR=`expr ${#key_list[@]} - 1`
VALUE_EXPR=`expr ${#value_list[@]} - 1`
## map을 사용하기 위한 배열 변수 선언
declare -A map_var
## 함수 선언
function map_func() {
count=$3 ## 아래 코드에서 i로 전달받은 값을 count 변수에 저장
map_var[$1]=$2 ## key=value 형태로 저장
if [[ $count -eq $KEY_EXPR ]]; then ## count와 key의 길이가 같을 경우 코드 시행
for _key in "${!map_var[@]}" ## map_var의 key를 _key 변수로 저장
do
echo "key : $_key , value : ${map_var[$_key]}" ## key value 출력
done
fi
}
if [[ $KEY_EXPR -eq $VALUE_EXPR ]]; then ## key와 value의 행 개수가 같을 경우 코드 실행
for ((i=0;i<=${#key_list[@]}&&i<=${#value_list[@]};i++)) ## 변수 i의 값이 key_list와 value_list의 길이보다 커질때까지 반복
do
map_func ${key_list[$i]} ${value_list[$i]} $i ## map_func 함수에 key_list, value_list, i 변수 값을 전달
done
else
echo "key와 value의 길이가 다릅니다." ## key와 value의 행 개수가 다를 경우 출력
fi
반응형