Как соединить два файла csv в один и добавить при дополнительный атрибут через bash
В данном упражнении сборника используется набор данных, который называется wine.csv. Как пишет автор, его сгруппировали из двух разделены между белым и красным вином наборов “Качество вина” и в получившийся файл добавили дополнительный тип атрибута, содержащий тип вина (красное или белое).
Я хочу сам создать такой же файл, при помощи командной строки linux, например в bash.
При помощи wget я скачал наборы данных по красному и белому винам.
Далее я хочу объединить файлы в один, при этом добавив столбец type, в котором будет указан вид вина - red/white (как в файле из задания), но не знаю при помощи каких команд это сделать.
После всех проделанных манипуляций, я хочу отфильтровать файл, оставив в нем только вина с качеством больше 6 и содержанием спирта выше среднего.
Подскажите, какую команду или скрипт я могу использовать для решения данной задачи? Благодарю за содействие и помощь в решении!
Ответы (1 шт):
Подскажите, какую команду или скрипт я могу использовать для решения данной задачи?
bash, cat, echo, for, while, read, head, tail, cut, bc
Или подробнее
Оторвем голову у одного из файлов и запишем в сводный добавив столбец:
echo $(cat winequality-*.csv | head -n1)';"sort"' > winequality.csv
Прочитаем имена файлов по одному:
for input in winequality-*.csv
do
И без головы отправляем:
tail -n +2 "$input" | \
В цикл читать построчно
while read -r line
do
Из имени файла извлечем тип, прилепим к строке и дозапишем в сводный
echo "${line};${input:12:-4}" >> winequality.csv
И тут концы циклов:
done
done
Чтоб отфильтровать выше 6 используй if и cut:
quality=$($line | cut -f 12 -d \;)
if test $quality -ge 6
then
...
fi
Со среднем тоже самое, только нужно добавить ещё один цикл чтоб его сосчитать:
SUM=0
COUNT=0
for ...
while ...
alcohol=$($line | cut -f 11 -d \;)
SUM=$(echo $SUM+$alcohol | bc -l)
(( COUNT++ ))
done
done
AVG=$(echo $SUM/$COUNT | bc -l)
Понадобился калькулятор - bc, потому как баш не умеет работать с дробными числами.
П.С. учебник то по питону - может не стоит напрягать баш такими задачами?