Colete saída do awk no script bash para processamento

1

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?

    
por Shawn 14.10.2016 / 15:35

2 respostas

2

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
    
por 14.10.2016 / 15:43
2

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

    
por 14.10.2016 / 15:54