shell-script-pt
[Top][All Lists]
Advanced

[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
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]