Как получить несколько строк из сжатого файла.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
}