[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Script para acessar uma matriz
From: |
andelnyr |
Subject: |
Script para acessar uma matriz |
Date: |
Fri, 08 Jan 2010 01:08:29 -0000 |
User-agent: |
eGroups-EW/0.82 |
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
- Script para acessar uma matriz,
andelnyr <=