O que você deve fazer é imprimir o primeiro item e deixar o cursor parar. Então você pode começar a trabalhar no loop e avançar o cursor inserindo vírgula e nova linha. printf
é mais útil que eco nesse aspecto. Para evitar a repetição excessiva e encurtar o código, use funções.
Como não tenho os arquivos que você está analisando com o awk, não posso trabalhar com o script, mas o exemplo abaixo ilustra o que estou tentando transmitir.
#!/bin/bash
print_entry(){
# sommeMag would be variable $2, $1 is store
if [ -z $2 ]
then
printf '"%s":0' "$1"
else
printf '"%s":%s' "$1" "$2"
fi
}
# main part of the script
printf "%s\n" "{"
# do the first one unconditionally but without comma
print_entry "something1" "something2"
for i in 2 3 4 5
do
# because first one was printed unconditionally
# now we just keep printing comma and moving cursor
# to newline to insert the new entry
printf ",\n"
print_entry "something$i" "$i"
done
printf "\n%s" "}"
Execução de amostra
$ ./make_json.sh
{
"something1":something2,
"something2":2,
"something3":3,
"something4":4,
"something5":5
}$
A abordagem acima é tipicamente o que eu chamo de "adicionar vírgula atrás". Outra abordagem seria "Adicionar vírgula à frente", mas em vez de loop, use while
loop com contador para simular o estilo C para o comportamento do loop. Se você chegar ao último item, não envie vírgula. Basicamente
counter=1
while [ $counter -le 298 ]
do
$json_value=$(command1)
if [ $counter -ne 298 ]
then
echo $json_value ,
else
echo $json_value
fi
$counter=$(($counter+1))
done