removido
(usa Nenhuma)
Enviado em 22/12/2014 - 14:44h
passosfil escreveu:
Agora usando essa ideia como faço pra excluir somente elemento de linha "i" e coluna "j"? E como faço para substituir um desses elemento?
[/quote]
Para este caso eu recomendo carregar toda a matriz num array em memória. Embora arrays em bash possuam apenas uma dimensão, existem os arrays associativos e com eles podemos construir qualquer dimensão de matriz.
Para carregar esse arquivo num array "multidimensional", podemos fazer:
declare -A matriz # declarando 'matriz' como um array associativo
linha=1
while read -a arr; do
for (( c = 0; c < ${#arr[*]}; c++)); do
let coluna=c+1
index="$linha,$coluna" # adoteu a vírgula apenas por conveniência
matriz["$index"]="${arr[$c]}"
done
let linha+=1
done < teste.txt
Para conferir como ficou em "memória", pode-se usar o comando:
$ set | grep matriz
(não é muito legível).
Agora, para endereçar um elemento específico, basta escrever os índices separados por vírgula:
echo ${matriz[3,2]}
irá imprimir o segundo elemento da terceira linha (imprime 'a55').
Substituição, e reimpressão da matriz ficam fáceis desta forma.
No exemplo que você passou, para remover o segundo elemento da quinta linha, você poderia fazer apenas:
matriz[5,2]=' ' # aqui eu substitui por três espaços por conveniência também :P
e reimprimir o matriz modificada:
for (( i = 1; i <= $linha; i++ )); do
for (( j = 1; j <= $coluna; j++ )); do
arr[j]=${matriz[$i,$j]}
done
echo "${arr[@]}"
unset arr
done
echo "${arr[@]}"