Utilizzando bash, 'appiattirei' l'array in questo modo:Originariamente inviato da Guglie
ok, ho rinunciato a voler usare bash: lo sto scrivendo in C++ usando libxmlpp![]()
Il test:codice:#!/bin/bash # # === struttura origine, campi separati da '\n' === # [nome1] # descrizione=descrizione1 # comando=comando1 # # === struttura finale, campi separati dal ':' === # nome1:descrizione1:comando1 # declare -a comandi ### vettore per i dati indice=-1 ### indice per il vettore campo="" ### il singolo campo while read riga; do ### verifico se inizia un nuovo record if echo "$riga" | grep -e "^\[.*\][:space:]*$" >/dev/null; then ### incremento indice ed assegno il campo let ++indice campo=$(echo -n "$riga" | sed -e "s/^\[\(.*\)\][:space:]*$/\1/") else ### verifico che sia una riga per le descrizioni/comandi if echo "$riga" | grep -e "^[:space:]*.*[:space:]*=[:space:]*.*[:space:]*$" >/dev/null; then ### assegno il campo campo=$(echo -n "$riga" | sed -e "s/^[:space:]*.*[:space:]*=[:space:]*\(.*\)[:space:]*$/\1/") else ### ignoro spudoratamente ogni altra cosa continue fi fi ### aggiorno il record corrente comandi[$indice]="${comandi[$indice]}${campo}:" done ### output per mostrare quanto è stato fatto for elementi in "${comandi[@]}"; do echo $elementi done
Non so se può servirti.codice:cacao74@winnie:~/tmp/bash$ cat elenco_comandi.txt [nome_1] descrizione= descrizione 1 comando = comando 1 [nome_2] descrizione= descrizione 2 comando = comando 2 cacao74@winnie:~/tmp/bash$ bash array.sh < elenco_comandi.txt nome_1: descrizione 1: comando 1: nome_2: descrizione 2: comando 2:
Dovendo gestire array multidimensionali, ti inviterei caldamente a *riprovarci in perl*.
ciao


Rispondi quotando