Tudo pode ser feito dentro do comando awk
único construindo uma matriz grande com todos os dados, mas se o arquivo for muito grande, você pode ter problemas com a memória disponível. Assim, eu faria isso em várias etapas:
header=$(awk '{print $1}' file | uniq | tr '\n' ',')
printf "${header%?}\n" > output
paste -d, <(awk '$1=="Quantity"{print $2}' file) \
<(awk '$1=="Price"{print $2}' file) \
<(awk '$1=="Discount"{print $2}' file) >> output
A única parte complicada aqui é remover a última vírgula no final do cabeçalho. Eu usei o construtor ${par%?}
para isso.