Programming/Bash Shell Script

[Bash Shell Script] 쉘 스크립트 파일 2개를 불러와 key-value 형태로 변환 (bash shell script key-value, bash shell script map)

Nirsa 2021. 12. 14. 16:20
반응형
쉘 스크립트 파일 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
반응형