Depois de ler o que você diz que quer fazer:
master="path/masterlist.txt"
while read json_path; do
while read key; do
printf 'File="%s", Key="%s"\n' "$json_path" "$key"
jq ". .'$key'" "$json_path"
done <key.txt
done <"$master" >list.txt
A lista de arquivos JSON é lida de $master
e cada caminho é atribuído a json_path
por vez.
No loop interno, as chaves são lidas de key.txt
e atribuídas a key
por sua vez. O utilitário jq
é chamado em $json_path
com o argumento . .'$key'
, em que $key
é expandido com o valor da chave atual.
Toda saída é colocada em list.txt
.
Pode haver alguma otimização a ser feita com o loop interno. Parece desnecessário ler todas as chaves em cada iteração do loop externo, por exemplo.
Versão anotada do seu script:
master="path/masterlist.txt" # this is never used
while read master # this will set $master to something from list.txt
do
for KEY in 'key.txt' # $KEY will be the string 'key.txt' (nothing else)
do
jq '. .'$KEY'' $f # $f is empty
echo $KEY
done >> list.txt # better to >list.txt after "done" of outer loop
echo $master
done < list.txt # you probably don't want to read from this file