Я придумал это решение, и оно у меня работает.
echo print `top -n 1 | tr -s " " | cut -d$" " -f10 | tail -n +8 | head -n -1 | paste -sd+ | bc`/ `nproc` | python
Источник (написать): https://mohammadg.com/programming/how-to-get-overall-cpu-utilization-from-the-bash-command-line/
Если вам нужна только первая строка без распаковки файла:
gunzip -c logfile.gz | awk 'NR==1 {print; exit}'
Это отправит сжатые данные на стандартный вывод без их распаковки, а awk
напечатает только первую строку.
Чтобы просто сопоставить дату из 1-й строки заархивированного файла-zgrep
решение:
zgrep -m1 -o '^[^[:space:]]*' logfile.gz
Это выведет первый YYYY-MM-DD
для вас.
Вы можете ограничить объем передаваемых данных доzcat
(или gzip -dc
), а затем запросить первую строку:
head -c 1000 logfile.gz | zcat 2>/dev/null | head -1 | read logdate otherstuff
Отрегулируйте 1000
, если при этом недостаточно данных для получения всей первой строки.
Передача вывода zcat
в head -n 1
будет распаковывать небольшой объем данных, гарантированно достаточный для отображения первой строки, но обычно не более нескольких заполнений буфера -(96 КиБ в мои эксперименты):
zcat logfile.gz | head -n 1
После того, как head
закончил чтение одной строки, он закрывает свой ввод, что закрывает канал, и zcat
останавливается после получения SIGPIPE
(, что происходит при следующей попытке записи в закрытый канал ). Вы можете увидеть это, запустив
(zcat logfile.gz; echo $? >&2) | head -n 1
Это покажет, что zcat
завершается с кодом 141, что указывает на остановку из-заSIGPIPE
(13 + 128 ).
Вы можете добавить больше пост-обработки -, , например. с помощью AWK, чтобы извлечь только дату:
zcat logfile.gz | awk '{ print $1; exit }'
(В macOS вам может понадобиться использовать gzcat
, а не zcat
для обработки файлов, сжатых gzip.)