2013-04-25 3 views
0

У меня есть куча больших сжатых файлов, которые я хочу объединить. Проблема в том, что в конце несжатой версии не имеют символов новой строки, поэтому, если я попытаюсь просто скомпоновать их вместе и работать над ними, то последняя строка в одном файле будет соединена с первой строкой в ​​следующем файле (который вызывает ошибку при использовании программного обеспечения, которое я использую). Просто котировка их с новой строкой, вставленной между каждым сжатым файлом, не работает, поскольку я думаю, что gzip обнаруживает символ новой строки и думает обо всем после того, как он «завершает мусор».Uncompress, редактировать, сжимать и объединять файлы

for f in *.gz; do (cat "${f}"; echo) >> all.gz; done; 
gzip -d all.gz 

gzip: all.gz: decompression OK, trailing garbage ignored 

То, что я хотел бы сделать что-то вроде этого:

unzip file1.gz | add a newline char| gzip the output >> output.gz 

, а затем сделать то же самое с file2.gz, file3.gz и т.д., и т.д.

Любой предложения?

ответ

2

Вам не нужно разжимать и повторно сжимать. Просто сжимайте однобайтный символ новой строки с помощью gzip и объединяйте между большими файлами gzip.

echo | gzip > newline.gz 
cat file1.gz newline.gz file2.gz newline.gz file3.gz ... > file.gz 

Это будет 21-байтовый файл вставки для каждой новой строки, но так как вы сказали, что другие файлы являются большими, что не имеет значения.

+0

Это отличная идея и работает очень хорошо. Большое спасибо. – GrahamE