Eu escreveria:
mapfile -t rawdata < <(sed 1d /path/to/data.csv)
datacol1=()
datacol2=()
for line in "${rawdata[@]}"; do
IFS=, read -ra fields <<< "$line"
datacol1+=( "${fields[0]}" )
datacol2+=( "${fields[1]}" )
done
for ((i=0; i < "${#datacol1[@]}"; i++)); do
stuff with "${datacol1[i]}" and "${datacol2[i]}"
done
- use
mapfile
para ler as linhas de um arquivo em uma matriz - use
IFS
eread
para ler campos separados por vírgulas de uma linha- quebrará com qualquer vírgula dentro de strings entre aspas: use um analisador CSV real .
- use o formulário em forma de C de
for
para evitar chamar para seq
Claro, você não precisa do segundo loop ou das variáveis datacol *
for line in "${rawdata[@]}"; do
IFS=, read -a fields <<< "$line"
stuff with "${fields[0]}" and "${fields[1]}"
done
No bash 3 você não terá mapfile
, então use um while-loop
datacol1=()
datacol2=()
while IFS=, read -ra fields; do
datacol1+=("${fields[0]}")
datacol2+=("${fields[1]}")
done < <(sed 1d /path/to/data.csv)