Prezados Sou iniciante nessa cachaça que é a programação em Shell Script e tenho acessado bastante as mensagens aqui do grupo e consultado tanto o livro do Júlio quanto o do Aurélio e tenho encontrado as respostas para a esmagadora maioria das minhas dúvidas. Recentemente comecei a desenvolver em caráter didático, melhorias em alguns scripts para o sistema que emprego no meu trabalho. Já estou há um pouco mais de um mês nisso e percebo alguma evolução, pois a cada dia que passa, consigo entender um pouco mais dos códigos que antes pareciam ter sido escritos em alguma espécie de língua morta. Atualmente me deparo com uma dificuldade que não consegui solucionar sozinho, daí decidi recorrer aos "universitários".
Possuo um arquivo de texto chamado dados.txt com o seguinte conteúdo: EQP VL1 VL2 VL3 A 100 120 150 B 110 130 100 C 23 45 90 É uma matriz e pelo que já li o shell não trata matrizes polidimensionais, ficando apenas com as unidimensionais os vetores. Desejo poder ler e escrever neste arquivo fornecendo linha e coluna para acessar os dados e escrevi o seguinte código: #Transforma de coluna para índice do vetor coluna2id() { case "$coluna" in "VL1") id="1" ;; "VL2") id="2" ;; "VL#") id="3" ;; esac } #Função para "pegar" um dado get_data() { linha="$1" coluna="$2" coluna2id while read dados do vetor_dados=( $dados ) if [ "${vetor_dados[0]}" = "$linha" ] then echo "${vetor_dados["$id"]}" fi done < dados.txt } #Função para "escrever" um dado put_data() { linha="$1" coluna="$2" valor="$3" col2id while read dados do vetor_dados=( $dados ) if [ "${vetor_dados[0]}" = "$valor" ] then vetor_dados["$id"]="$valor" linha_tmp="${vetor_dados[*]}" fi done < dados.txt grep -i -v "$vao" dados.txt > dados.tmp echo "${linha_tmp[*]}" >> dados.tmp mv dados.tmp dados.txt } Se você fizer: get_data A VL3 você tem como resultado 150 put_data C VL2 70 você substitui o valor 45 pelo valor 70 no arquivo. Tudo funciona, porém este processo de leitura e escrita será realizado um grande número de vezes e como todo o processo de dá através de leitura e escrita em disco a coisa toda acaba sendo relativamente lenta 6 ms para leitura e 37 ms para escrita no pior caso. Pensei em realizar estas atividades com variáveis e não com arquivos para evitar o grande número de operações de leitura e escrita no HD, mas já tentei algumas modificações e não obtive nenhum resultado. Gostaria de alguma sugestão para melhoria deste tempo de acesso. Desde já agradeço