Este é um script simples que deve mostrar o uso de readarray
.
Eu continuo mais parecido com o que você postou.
#!/bin/bash
awk '{ print $1 }' data.txt > file_column1.txt
awk '{ print $2 }' data.txt > file_column2.txt
awk '{ print $3 }' data.txt > file_column3.txt
# NLines=' wc -l data.txt | awk '{print $1}''
readarray -t column1 < file_column1.txt
readarray -t column2 < file_column2.txt
readarray -t column3 < file_column3.txt
i=0;
for item in "${column1[@]}"; do
echo output is ${column1[$i]} bla ${column2[$i]} bla ${column3[$i]};
let "i=i+1"
done
# rm -f file_column1.txt file_column2.txt file_column3.txt
Comentários :
- Com
awk
, você pode imprimir a coluna desejada ($1
para o primeiro,$2
para o segundo e assim por diante). Você cria um arquivo diferente para cada coluna. - Se não comentada, a linha
#Nlines=wc -l | awk '{print $1}'
poderia ser usada para manter a contagem do número de linhas para o vetor que será criado depois comreadarray
e para fazer o loop de uma maneira diferente ... - Com
readarray
você leu o arquivo único e inseriu um vetor 1D. - O loop
for
é feito para cada componente da coluna do vetor 1D1. Deve ser feito tomando cada vetor porque no seu exemplo eles têm o mesmo tamanho. Isso deve ser feito usandoNlines
. - Na variável não usada
item
dentro do loop, há sempre o mesmo valor de column1 [i] - Você acessa diretamente o componente que você deseja da matriz (o primeiro índice é
0
e o último éNlines-1
) - Você aumenta o valor de
i
em cada iteração do loopfor
. - Se necessário, remova o comentário para apagar os arquivos temporários criados no script.
A saída é
output is 444 bla 999 bla 000
output is 555 bla 888 bla xxx
output is 666 bla 777 bla xxx
Último comentário
Se você aninhar 3 loop (um dentro do outro) você obterá cada permutação: não 3 mas 3 * 3 * 3 = 27 linhas
0 0 0
0 0 1
0 0 2
0 1 0
...