Как получить несколько строк из сжатого файла.gz без распаковки

Как получить первые несколько строк из файла gziped? Я пробовал zcat, но выдает ошибку

zcat CONN.20111109.0057.gz|head
CONN.20111109.0057.gz.Z: A file or directory in the path name does not exist.

6 ответов

Решение

zcat(1) может быть предоставлен либо compress(1) или gzip(1), В вашей системе, похоже, compress(1) - он ищет файл с .Z расширение.

Переключиться на gzip -cd на месте zcat и ваша команда должна работать нормально:

 gzip -cd CONN.20111109.0057.gz | head

На Mac вы должны использовать < с zcat:

zcat < CONN.20111109.0057.gz|head

В некоторых системах (например, Mac) вам нужно использовать gzcat,

Если требуется непрерывный диапазон строк, один из вариантов может быть:

gunzip -c file.gz | sed -n '5,10p;11q' > subFile

где строки между 5-й и 10-й строкой (обе включительно) file.gz извлекаются в новый subFile, За sed варианты, обратитесь к руководству.

Если требуется каждая, скажем, 5-я строка:

gunzip -c file.gz | sed -n '1~5p;6q' > subFile

который извлекает 1-ю строку, перепрыгивает через 4 строки и выбирает 5-ю строку и так далее.

Если вы хотите использовать zcat, это покажет первые 10 строк

      zcat your_filename.gz | head

Допустим, вам нужна первая строка из 16

      zcat your_filename.gz | head -n 16

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

gunzip -c file.gz | awk -v from=10 -v to=20 'NR>=from { print NR,$0; if (NR>=to) exit 1}'

Вот фрагмент кода awk, использованный в одном лайнере выше. В awk NR - это встроенная переменная (количество найденных записей), которая обычно эквивалентна номеру строки. переменные from и to выбираются из командной строки с помощью параметров -v.

NR>=from {
   print NR,$0; 
   if (NR>=to) 
     exit 1
}
Другие вопросы по тегам