Intereting Posts
bash, который использует nc для отчетов telnet ": команда не найдена ОК" отображать имена и значения всех переменных env, которые начинаются с «nlu_setting» Как обновить bash на версиях EOL Ubuntu? Рекурсивно сравнивать каталоги с резюме по разному содержимому без изучения различий в содержимом файла Присоединившись к пользователю AD, изменив на Как я могу исправить свой звук на семействе Intel Core 82801I (ICH9 Family) HD Audio Controller (rev 02) ALC662? Смесь кодировок Внешний экран распознан, но черный Почему ls и stat показывают разные измененные даты? Блокировка телеграммы с помощью / etc / hosts как скопировать часть текстового файла побайтно в другой текстовый файл? dd, head или? Где xfce4 поддерживает ссылки на приложения? Пользовательские задания cron больше не выполняются (возможно, SELinux) Как запустить smartctl как root без переключения на root? Почему «эхо» намного быстрее, чем «прикосновение»?

Как разобрать CSV-файл на основе групп из определенного количества строк?

У меня есть файл CSV, который имеет следующий формат:

Date,Towns,Count1,Count2 6/26/2015,HYDERABAD,234552,0 ,KARIM NAGAR,7520,0 ,RAJAMUNDRY,7248,256 ,KURNOOL,5848,32,0 ,TIRUPATI,8560,64,0 ,VIJAYAWADA,16776,96,0,0,16872 ,VIZAG,30264,624,8,0.0128205128205128,30888 ,WARANGAL,14112,880,0,0,14992 ,GUNTUR,10304,224,0,0,10528 6/27/2015,HYDERABAD,0,6960,0,0,6960 ,KARIM NAGAR,0,0,0,ERROR,0 ,RAJAMUNDRY,0,256,0,0,256 ,KURNOOL,0,32,0,0,32 ,TIRUPATI,0,64,0,0,64 ,VIJAYAWADA,0,96,0,0,96 ,VIZAG,0,528,0,0,528 ,WARANGAL,0,880,0,0,880 ,GUNTUR,0,224,0,0,224 

Этот CSV имеет количество столбцов и строк. Строки группируются на основе дат таким образом, что каждый город имеет свои отдельные счетчики, а CSV имеет значения строк для каждого города, которые разделены первым столбцом (датой).

Есть ли способ прочитать этот файл CSV с использованием сценария оболочки таким образом, чтобы код идентифицировал начало и конец каждого дня (который может быть основан на столбце даты или столбце города) и группирует строки в соответствии с этим ? Скажем, я хочу найти общее количество Count2 с 6/26/2015 (что будет суммой всех городов от HYDERABAD до GUNTUR 6/26/2015)?

Строки в вашем CSV не имеют одинакового количества полей. К счастью, игнорируя этот вопрос, вы можете сделать что-то вроде этого:

 awk -F, -v OFS=, '{ if($1 ~ /^[ \t]*$/) $1 = old; else old = $1 } 1' file.csv | \ datamash -H -t, -g 1 sum 4 

datamash выше – это GNU datamash . awk нормализует первый столбец, а datamash выполняет группировку и суммирование.

Вывод:

 GroupBy(Date),sum(Count2) 6/26/2015,2176 6/27/2015,9040 

Поиск awk единственного решения остается как (легкое) упражнение для читателя. 🙂