Isso pode ser feito facilmente usando a matriz de script de shell:
i=0
for file in file1 file2 ....; do
output[$i]=$(awk -F":" '{ print "Name: " $1 "\t\tID:" $3 }' "${file}")
i=$((${i}+1))
done
Eu tenho um loop em um script bash que processa vários arquivos em uma pasta. No meu loop, para cada arquivo, eu executo a linha abaixo:
awk -F":" '{ print "Name: " $1 "\t\tID:" $3 }' $file
Eu gostaria de coletar a saída de todos os arquivos processados em alguma variável / matriz bash para outro processamento fora do loop. Como posso conseguir isso em bash?
Em um sentido semelhante ao a0f3dd13 você pode usar matrizes associativas . Eles podem ser úteis aqui, especialmente quando chega a hora de recuperar os dados.
Matrizes associativas podem usar uma string para seu índice em vez de um inteiro (são basicamente mapas hash), para que você possa recuperar os dados com mais facilidade.
declare -A output
for file in file1 file2 ....;do
output["$file"]=$(awk -F":" '{ print "Name: " $1 "\t\tID:" $3 }' "${file}")
done
Em seguida, para recuperar os dados que você pode usar:
echo "${output[file1]}"
Isso produziria os resultados obtidos de file1
Tags bash shell-script