У меня большой текстовый файл gzip. Я хотел бы что-то вроде:
zcat BIGFILE.GZ | \
    awk (snag 10,000 lines and redirect to...) | \
    gzip -9 smallerPartFile.gz
часть awk, я хочу, чтобы она взяла 10000 строк и отправила их в gzip, а затем повторяла до тех пор, пока все строки в исходном входном файле не будут использованы. Я нашел скрипт, который утверждает, что делает это, но когда я запускаю его на своих файлах, а затем сравниваю оригинал с теми, которые были разделены, а затем объединены, строки отсутствуют. Итак, что-то не так с частью awk, и я не уверен, какая часть сломана.
Цель:
- Прочитайте исходный файл один раз за всю операцию
 - Разделите источник на более мелкие части, разделенные символом новой строки. Скажем, 10000 строк на файл
 - Сожмите целевые файлы, созданные в результате действия разделения, и сделайте это без дополнительного шага после обработки этого сценария.
 
Вот код Может кто-нибудь сказать мне, почему это не приводит к файлу, который может быть разделен и объединен и затем успешно преобразован в оригинал?
# Generate files part0.dat.gz, part1.dat.gz, etc.
# restore with: zcat foo* | gzip -9 > restoredFoo.sql.gz (or something like that)
prefix="foo"
count=0
suffix=".sql"
lines=10000 # Split every 10000 line.
zcat /home/foo/foo.sql.gz |
while true; do
  partname=${prefix}${count}${suffix}
  # Use awk to read the required number of lines from the input stream.
  awk -v lines=${lines} 'NR <= lines {print} NR == lines {exit}' >${partname}
  if [[ -s ${partname} ]]; then
    # Compress this part file.
    gzip -9 ${partname}
    (( ++count ))
  else
    # Last file generated is empty, delete it.
    rm -f ${partname}
    break
  fi
done
 