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 ($1para o primeiro,$2para 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 comreadarraye para fazer o loop de uma maneira diferente ... - Com
readarrayvocê 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
itemdentro do loop, há sempre o mesmo valor de column1 [i] - Você acessa diretamente o componente que você deseja da matriz (o primeiro índice é
0e o último éNlines-1) - Você aumenta o valor de
iem 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
...