Редактирование и объединение большого количества CSV в терминале Ma c - PullRequest
0 голосов
/ 29 мая 2020

У меня есть папка с ~ 8400 CSV-файлами, которые большие:

  • 2 столбца
  • ~ 17k строк

Я устал просто объединять все в Терминале с помощью cat и получил CSV-файл объемом 3,2 ГБ, над которым Excel просто смеялся, когда я пытался импортировать. Поэтому мне нужно уменьшить их, прежде чем объединить их, чтобы я мог начать возиться с данными в Excel. К счастью, мне нужна лишь небольшая часть данных.

По сути, это ежечасный временной ряд, начиная с января 2018 года (первый столбец - дата / время), но мне нужен только номер конца дня за последние 90 дней

  • Извлечь последние ~ 2160 строк каждого CSV (90 * 24)
  • Мне также нужен разделитель, чтобы показать мне, где начинается каждая таблица после слияния, поэтому после извлечения последних ~ 2160 строк я хочу для вставки в начало каждой строки с именем файла без расширения.
  • Удалять все записи каждого дня, кроме последней.

По моим подсчетам, это оставляет мне менее 800 тыс. Строк, которые Excel должен иметь возможность открывать.

Я думал, что все это может сделать sed, а затем cat объединить новые отредактированные файлы, но это выходит за рамки моих возможностей. Любая помощь очень ценится. Спасибо.

1 Ответ

0 голосов
/ 29 мая 2020

Вот чрезвычайно упрощенная версия, из которой вы можете экстраполировать.

В моем каталоге пять файлов:

$ ls folder-with-files/
a   b   c   d   e

Каждый файл состоит из пяти строк.

$ cat folder-with-files/a
1
2
3
4
5

$ cat folder-with-files/b
10
11
12
13
14
15

et c.

Теперь предположим, что мне нужны последние две строки каждого файла. Ключ там - команда tail. Перед этим я выскажу имя файла в соответствии с вашим spe c.

$ for f in folder-with-files/*; do echo "FILE: " $f; tail -2 $f; done > big.csv

Результат:

$ cat big.csv
FILE:  folder-with-files/a
4
5
FILE:  folder-with-files/b
14
15
FILE:  folder-with-files/c
24
25
FILE:  folder-with-files/d
34
35
FILE:  folder-with-files/e
44
45
...