Как соединить два файла csv в один и добавить при дополнительный атрибут через bash

В данном упражнении сборника используется набор данных, который называется wine.csv. Как пишет автор, его сгруппировали из двух разделены между белым и красным вином наборов “Качество вина” и в получившийся файл добавили дополнительный тип атрибута, содержащий тип вина (красное или белое).

Я хочу сам создать такой же файл, при помощи командной строки linux, например в bash.

При помощи wget я скачал наборы данных по красному и белому винам.

Далее я хочу объединить файлы в один, при этом добавив столбец type, в котором будет указан вид вина - red/white (как в файле из задания), но не знаю при помощи каких команд это сделать.

После всех проделанных манипуляций, я хочу отфильтровать файл, оставив в нем только вина с качеством больше 6 и содержанием спирта выше среднего.

Подскажите, какую команду или скрипт я могу использовать для решения данной задачи? Благодарю за содействие и помощь в решении!


Ответы (1 шт):

Автор решения: eri

Подскажите, какую команду или скрипт я могу использовать для решения данной задачи?

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, потому как баш не умеет работать с дробными числами.

П.С. учебник то по питону - может не стоит напрягать баш такими задачами?

→ Ссылка