Você está entendendo mal a sintaxe do comando printf
(que segue de perto o da função C
subjacente: veja por exemplo man 3 printf
para documentação completa).
printf
tem uma sequência de formatos > que consiste em uma sequência de especificadores de formato e outros caracteres literais, seguidos por tantos argumentos separados por vírgula quantos forem necessários para preencher o dado formato. Em seu comando
printf "%s,%d,%0.2f%\n",c[i]"\t"a[i]"\t"100*b[i]/x"%"
você está dizendo para esperar 3 valores (um %s
, um %d
e um %0.2f
), mas está dando a ele um único argumento concatenado de string c[i]"\t"a[i]"\t"100*b[i]/x"%"
. Por isso, ficará sem argumentos durante a tarefa.
O que você supostamente pretendia é
printf "%s\t%d\t%0.2f%%\n", c[i], a[i], 100*b[i]/x
(as guias ficam dentro da string de formatação; o %%
corresponde a um literal %
, ou seja, impede que %
seja interpretado como o início de outro especificador de formato).