Команда zcat — это аналог cat, которая выводит содержимое одного или нескольких файлов. Точнее говоря, команда cat предназначена для объединения нескольких текстовых файлов. Команда запускается примерно так:
cat файл1 файл2 файл3
Содержимое всех файлов будет последовательно выведено в стандартный вывод.
Если указать только один файл:
cat файл1
то будет выведено его содержимое. Довольно часто именно для этого и используется команда cat.
Команда zcat работает примерно также, только выводит содержимое архивных файлов с расширением .gz
За один раз можно вывести содержимое одного или нескольких файлов. Например
zcat access_log.1.gz access_log.2.gz access_log.3.gz
Можно использовать подстановочные символы, чтобы показать текст из сразу всех файлов в текущей папке:
zcat access_log.*gz
Как одновременно вывести содержимое текстовых файлов и архивов?
К примеру нужно объединить текстовый файл и сжатый файл, если попробовать выполнить команду вида:
zcat access_log access_log.1.gz
То она действительно покажет файл .gz, но для файла access_log (текстовый файл), будет выведено сообщение с ошибкой:
gzip: access_log: not in gzip format
Сам файл показан не будет.
Чтобы одновременно выводить содержимое и текстовых, и архивных файлов, можно использовать конструкцию из zcat и cat команд. Пример:
zcat access_log.*gz | cat access_log -
В результате первая команда (zcat access_log.*gz) прочитает содержимое всех файлов .gz и передаст их по трубе (|) следующей команде. То есть для следующей команды это будет стандартный ввод. Затем вторая команда (cat access_log -) прочитает содержимое первого файла access_log, затем содержимое второго файла, который обозначен как - (дефис), что означает стандартный ввод. В данном случае по стандартному вводу по трубе команда zcat передаёт содержимое файлов access_log.*gz. Получается, что в самом начале будет показано содержимое файла access_log, а затем то, что прочитала команда zcat, то есть все файлы access_log.*gz.
Итак, с помощью этих двух команд можно одновременно считывать и объединять сжатые файлы и файлы в виде простого текста.
Если мы хотим, чтобы сначала показывался вывод команды zcat, то поменяйте местами файлы при cat, то есть вместо access_log -, напишите - access_log (на первом месте чёрточка — то есть вначале идёт чтение из стандартного ввода, а затем чтение настоящих файлов):
zcat access_log.*gz | cat - access_log
Как при использовании cat/zcat предварительно вывести текст
Кстати, этот же метод можно использовать чтобы добавлять к выводимому файлу текстовые строки, например, перед выводом содержимого файлов или после них. К примеру:
echo "Веб-журнал сайта ZaLinux.ru" | cat - access_log
Связанные статьи:
- Инструкция по использованию команды dd (68.8%)
- Как удалить метаданные файла на Linux (50%)
- Как найти дубликаты файлов на Linux с помощью dupeGuru (50%)
- Как проверить дисковое пространство на Linux с командой df (50%)
- Какие есть полезные инструменты с интерфейсом командной строки для системных администраторов Linux (50%)
- Как исправить «Windows is hibernated, refused to mount» (РЕШЕНО) (RANDOM - 50%)