Escrevendo um script bash para ler um arquivo de texto de números em arrays, por coluna, no Ubuntu

1

Estou tentando escrever um pequeno script bash no Ubuntu 12.04 e tenho pouca experiência. Um pequeno problema estranho ao converter um arquivo de texto de números em matrizes. Eu preciso de todos os primeiros números, segundo, etc em sua própria matriz, porque eu vou estar executando cálculos em números com base na coluna mais do que a linha de onde veio. Todas as linhas são 5 inteiros separados por espaços com um retorno no final de cada linha. Um array multidimensional é possível no bash? Obrigada!

    
por JClar 15.01.2014 / 20:34

3 respostas

-1

desculpe, não voltei. A solução foi mais simples do que eu pensava, já que os números eram separados por um espaço com um retorno no final das linhas.

#!/bin/bash
COUNT=1
while read arr1[COUNT] arr2[COUNT] arr3[COUNT] arr4[COUNT] arr5[COUNT]
do
echo "next line"
 echo "${arr1[COUNT]}" 
 echo "${arr2[COUNT]}"
 echo "${arr3[COUNT]}"
 echo "${arr4[COUNT]}"
 echo "${arr5[COUNT]}"
COUNT=$[$COUNT +1]
done < /home/john/testloop.txt
    
por JClar 21.01.2014 / 16:23
2

Aqui está um script, ele armazenará números do arquivo de texto em dois arrays x e y conforme desejado,

#!/bin/bash

nl=$(cat "" | wc -l)
declare -a x
declare -a y
for i in $(seq 1 $nl)
do
    x[i]="$(cat "" | awk -v p="$i" '{if(NR==p) print }')"
    y[i]="$(cat "" | awk -v p="$i" '{if(NR==p) print }')"
done
#upto this point all the numbers from first and second column of the file are stored 
#into x and y respectively. Following lines will just print them again for you.
for it in $(seq 1 $nl)
do
    echo "${x[$it]} ${y[$it]}"
done

Não se esqueça de dar permissão de execução de script.

chmod +x script.sh

Uso

./script.sh numfile.txt

onde estou pensando em você salvará o script acima como script.sh e seu arquivo de texto contendo números é numfile.txt . E ambos estão no mesmo diretório.

    
por souravc 21.01.2014 / 12:11
1
  

O Bash suporta apenas matrizes unidimensionais, embora um pequeno truque permita simular imagens multidimensionais.

Este documento contém um exemplo de uma matriz bidimensional. link

Gostaria de saber se outro idioma pode ser mais adequado ao seu caso de uso. Parece que você está esticando os limites do que o bash pode fazer, enquanto Python, Perl ou Ruby lidariam com essa tarefa com facilidade. Eu acho que a ferramenta que você usará para suas "computações" subsequentes determinará isso em grande medida.

    
por roadmr 15.01.2014 / 20:48