2010-06-10 2 views
2

BASH에서 csv 파일을 어떻게 2 차원 배열로 읽습니까? 스크립트는 가변 개수의 행과 열로 csv 파일을 가져올 수있을 정도로 충분히 동적이어야합니다. 예를 들어BASH에서 csv 파일을 어떻게 2 차원 배열로 읽습니까?

, 나는

AVERAGE  STDEV  MAX 
17   18  19 

또는

AVERAGE  STDEV  MAX  MIN 
17   18  19  1 
+0

지금까지 무엇을 얻었습니까? – samoz

+0

이것은 bash (2 차원 배열을 직접 지원하지도 않음)의 경우와 비슷합니다. Perl이나 Python을 사용하지 않는 이유는 무엇입니까? –

답변

4

2 차원 배열을 시뮬레이트하는 한 가지 방법은 행을 1 차원 배열의 문자열로 유지하고 각 반복마다 압축을 해제하는 것입니다. 데이터에 나타나지 않는 적절한 구분 기호를 선택해야합니다. 다음은 시뮬레이션 2 차원의 값 반복의 간단한 예입니다

name, start date, visits, games, balance 
"Williamson, Dennis", "January 11, 2007", 12, 42, 17000 

: 당신이 CSV를 언급 이후, 나는 쉼표를 사용합니다,하지만이 포함 된 쉼표와 같은 데이터를 처리 할 수있을만큼 똑똑하지 않습니다 차원 배열 :

# avg, stddev, max, min 
data_array=(
      "17,18,19,1" 
      "12,14,16,2" 
      "6,8,10,3" 
      ) 

saveIFS=$IFS 

for row in ${data_array[@]} 
do 
    IFS="," 
    cols=($row) 
    IFS=$saveIFS 
    for col in ${cols[@]} 
    do 
     newval=$(do_something $col) 
    done 
done 

배열의 내용을 변경하는이 가능합니다 : 당신이 볼 수 있듯이

rowidx=2 
colidx=2 
IFS="," 
cols=(${data_array[rowidx]}) 
cols[colidx]=$some_value 
data_array[rowidx]="${cols[*]}" 
IFS=$saveIFS 

, 그것은 빠르게 복잡해진다 내가 언급하지 않은 개는 많이 있습니다 에드. 파이썬을 사용하십시오.

0

배쉬는 하나의 차원 배열을 지원처럼 보이는 csv 파일이있는 경우.

예 27.17

http://tldp.org/LDP/abs/html/arrays.html

에서 그리고이 숙제 같은 소리 않습니다 동의 : 2 차원의 에뮬레이션은 고급 Bash 스크립팅 가이드에 twodim.sh을 확인해 볼 수 있습니다.

관련 문제