Как слить несколько .gz архивов (gzip) в один не распаковывая их в bash?
Как слить несколько .gz архивов (gzip) в один не распаковывая их? Есть множество таких архивов, весят очень много, распаковывать крайне не желательно, при этом нужно объединить в один файл. При этом в каждом из архивов хранится таблица у которой есть header, хотелось бы сделать так чтобы в общем файле оказался header только первого файла чтобы такие header'ы доставшихся файлов не втречались где то в средине общего файла. Как написать пайплайн в bash? Я в нем не силен.
Ответы (2 шт):
Читаю голову у первого файла, читаю со второй строчки все файлы. Всё в пайп, пайп в гзип, гзип в файл. Убедитесь что генератор изначальных файлов добавляет пустую строку в конце. если нет, то добавьте echo \n в цикле.
(
zcat file1.gz | head -n1 ;
for f in *.gz; do
zcat ${f} | tail -n+2
done
) | gzip > bigfile.tmp
mv bigfile.tmp bigfile.gz