Tentando obter informações específicas da matriz

1

Eu preciso converter essa matriz:

arr=("aa:" "info" "{" "bb:" "name" "value" "50;" "bb:" "surname" "oth_value" "50;" "bb:" "age" "number" "3;" "bb:" "about" "text" "void;" "}")

para algo assim:

arr=(("aa:" "info" "{") ("bb:" "name" "value" "50;") ("bb:" "surname" "oth_value" "50;") ("bb:" "age" "number" "3;") ("bb:" "about" "text" "void;") ("}"))

o objetivo é percorrer o array multidimensional para poder realizar ações com cada array que está dentro. Por exemplo:

for i in "${!arr[@]}"; do
   echo "${arr[i][0]}"
   # prints out the first value of each element
   echo "${arr[i][1]}"
   # prints out the second value of each element
done

O que eu preciso é poder separar as informações entre bb: e ; e usar cada um de seus elementos. Por exemplo, para ecoar. A única ideia que surgiu foi separar as informações necessárias nos arrays dentro do array principal (para criar multidimensional) e ao fazer um loop através dele, para usar os valores que eu preciso. Basicamente, haverá apenas três valores entre bb: e ; . Mas o número dessas seções bb: e ; é ilimitado. O aa: info { e o } devem ser cortados. Eu não preciso deles.

    
por John 15.08.2015 / 04:32

1 resposta

2
arr=("aa:" "info" "{" "bb:" "name" "value" "50;" "bb:" "surname" "oth_value" "50;" "bb:" "age" "number" "3;" "bb:" "about" "text" "void;" "}")
for ((i=3; i + 4 < ${#arr[@]}; i+=4))
do
    echo "${arr[i]}"
    echo "${arr[i + 1]}"
    echo "${arr[i + 2]}"
    echo "${arr[i + 3]}"
done

Este é um loop de estilo C simples e direto. Você pode ignorar qualquer um dos campos com os quais não quer se importar e alterar os números.

De onde quer que este array tenha originado, você certamente estaria melhor em geral usando um analisador adequado no texto de origem, mas isso satisfaz o cenário que você descreveu adequadamente. Assim que fica mais complicado, vai ficar muito mais difícil - é só porque acontece de ser puramente passo a passo que isso funciona simplesmente.

    
por 15.08.2015 / 04:55

Tags