Объединение N CSV-файлов в один CSV-файл

Записи, которые вас беспокоят, генерируются сценариями /etc/grub.d/10 _linux (комментарии в /boot/grub.cfg показывают, где генерируются различные части файла ). К сожалению, этот скрипт не допускает никакой конфигурации или настройки из коробки.

Единственное, что вы можете сделать, это вручную отредактировать /etc/grub.d/10 _linux. Однако в целом это кажется плохой идеей, поскольку это сложный сценарий, и редактирование сценария нарушит простые обновления вашей системы.

1
10.06.2021, 12:14
3 ответа

Попробуйтеawk

awk 'NR==1||FNR>1' GFP*.csv > output.csv

Это напечатает все строки каждого файла, начиная со второй строки(FNR>1означает, что на -строку файла -счетчик больше одного )для подавления повторяющихся заголовков, но обязательно напечатайте самую первую строку встретил (NR==1), который является строкой заголовка первого файла.

Затем вывод перенаправляется в файл output.csv.

Синтаксис использует тот факт, что awkбудет печатать текущую строку, если условие, найденное за пределами блока правил ({...}), истинно. В этом случае мы можем вообще опустить блоки правил, поскольку на самом деле мы не хотим редактировать, а только фильтровать входные файлы.

3
28.07.2021, 11:25

Используя perl, мы явно закрываем дескриптор файла при каждом условии eof, чтобы сбросить счетчик строк. Для абсолютной первой строки мы используем любую скалярную переменную $nr и предварительно увеличиваем ее.

perl -lne 'print if
  ++$nr==1||$.>1;
  eof && close(ARGV);
' GFP_*.CSV > total.csv

Использование GNU sedс параметром -sразделенных потоков, который обрабатывает файлы по отдельности.

{
head -n 1 "$(printf '%s\n' GFP_*.CSV |head -n 1 -)"
sed -se 1d GFP_*.csv
} > total.csv
0
28.07.2021, 11:25

Прежде всего, мы создадим наш заголовочный файл один раз и оставим его в той же папке, что и остальные CSV-файлы

head -qn 1 GFP_20210609.csv > common.header

common _header.csv содержит 1-ю строку любого выбранного вами CSV-файла (на основании того, что вы сказали, все CSV-файлы имеют одинаковый заголовок ). Вы должны создать этот файл один раз и оставить его для дальнейшего использования в том же каталоге.

Команда

headвыводит первые n строк текстового файла, что равно «1» в нашем случае файла заголовка.

Команда

tailвыводит последние n строк текстового файла. Начиная с «1», мы будем игнорировать первую строку во всех CSV-файлах, так как мы хотим избежать повторения заголовков.

Дополнительный параметр-q(тихий )как в head, так и в tailпредотвращает вывод дополнительной информации, которая нам не нужна в конечном файле.

Следующая строка — исходный код вашего скрипта:

cat common.header > FINAL.csv && tail -qn 1 GFP_*.csv >> FINAL.csv

Обе команды catи tailобъединены с &&, что означает, что tailбудет запускать только , если команда catвыполнена успешно.

(*)Примечание:tail -qn 1...также может быть записано как tail -q -n 1..., и это то же самое.

1
28.07.2021, 11:25

Теги

Похожие вопросы