zaLinux.ru

Как с помощью zcat вывести содержимое сжатых и обычных файлов


Команда 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

Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *