[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: ShellScript - Array
From: |
andelnyr |
Subject: |
Re: ShellScript - Array |
Date: |
Sun, 24 Oct 2010 12:03:37 -0000 |
User-agent: |
eGroups-EW/0.82 |
Leonardo
Recentemente tive esta necessidade e recebi ótimas dicas aqui no grupo,
principalmente esta do vetor associativo. Pude aplicar o vetor associativo em
sistemas com o shell 4.0, porém me deparei com uma situação onde não poderia
modificar a versão do shell.
Fiz um "vetor associativo tabajara"
Para esta ocasião utilizei o seguinte:
Considere:
cat matriz.txt
nome cl1 cl2 cl3 cl4
lin1 d11 d22 d13 d14
lin2 d21 d22 d23 d24
lin3 d31 d32 d33 d34
lin4 d41 d42 d43 d44
cat matriz_2d.sh
#!/bin/bash
# Sintaxe: ler_matriz linha coluna
ler_matriz() {
vetor=( $(fgrep $1 matriz.txt) )
echo "${vetor[$2]}"
}
# Sintaxe: grv_matriz linha coluna dado
grv_matriz() {
tmp=$(fgrep $1 matriz.txt)
vetor=( $(echo "$tmp") )
vetor[$2]=$3
sed s/"$tmp"/"${vetor[*]}"/g matriz.txt > matriz.tmp
mv matriz.tmp matriz.txt
}
#Atribuindo valores aos nomes das colunas
colunas=( $(fgrep "nome" matriz.txt) )
valor=0
for j in $(echo "${colunas[*]}")
do
eval "$j"=$valor
let valor++
done
Para ver o funcionamento deste arranjo:
source matriz_2d.sh
Para ler a matriz na posição linha1,coluna3 ...
ler_matriz lin1 cl3
d13 <---- o dado armazenado na posição informada
Para ler a matriz na posição linha2,coluna2 ...
ler_matriz lin2 cl2
d22 <---- o dado armazenado na posição informada
Para gravar na matriz na posição linha2,coluna1 o dado XXX...
grv_matriz lin2 col1 XXX
nome cl1 cl2 cl3 cl4
lin1 d11 d22 d13 d14
lin2 XXX d22 d23 d24
lin3 d31 d32 d33 d34
lin4 d41 d42 d43 d44
No meu caso particular, essa matriz arrumadinha é muito útil.
Abraços
--- Em address@hidden, Leonardo D'Angelo Gonçalves <leonardodg@...> escreveu
>
> Boa Tarde
>
> Gostaria de tirar uma duvida. O Bash ou qualquer outro shell possui suporte
> a array de 2 dimensoes? e como seria sua implementação
>