Все можно сделать с помощью одной команды awk
, построив большой массив со всеми данными, но если файл очень большой, у вас может быть проблемы с доступной памятью. Таким образом, я бы сделал это в несколько этапов:
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
Единственная сложная часть здесь - это удаление последней запятой в конце заголовка. Для этого я использовал конструкцию $ {par%?}
.