В настоящее время я использую
top -b -d 1 > file1.csv
, чтобы добавить весь вывод в файл CSV. Тем не менее, я бы хотел, чтобы только одно поле процессора (% us) было введено в file1. Я дошел до этого:
top -b -d 1|grep Cpu
, где я могу просматривать только записи процессора.
Когда я пытаюсь
top -b -d 1|grep Cpu > file1.csv
, он не работает, так как я даже не могу просмотреть свой файл.
Мое намерение состоит в том, чтобы построить динамический график LiveGraph для всех значений ЦП (хранящихся в CSV-файле). Спасибо!
Для общего использования ЦП:
Если вы ТОЛЬКО хотите использовать ЦП в целом, вы можете попробовать это:
top -b -d1 -n1|grep -i "Cpu(s)"|head -c21|cut -d ' ' -f3|cut -d '%' -f1 > file1.csv
Это даст вам только ЦП значение и обновить один в файле. Если вы хотите добавить данные в файл (поскольку я вижу, что вы называете его CSV-файлом), вместо одного> используйте два, как >> file1.csv
.
Для каждого потока и использования ЦП:
Сначала необходимо удалить остальные столбцы, чтобы было проще получить данные ЦП.
top
и нажмите f . Теперь для общего использования CPU у вас обычно есть другие инструменты, такие как ps
, iostat
и cat /proc/stat
. Для каждого вам нужен другой анализ, например, используемый для top. Я написал здесь только для ТОПа, поскольку вы явно упомянули это в заголовке.
ПРИМЕЧАНИЕ : Следует отметить, что top - не самый эффективный способ увидеть использование ЦП или работать с ним при разборе значений для него. Для некоторых использование f2 в команде cut показывает значение, для других - f3
Я думаю, что использование top
может быть не лучшим подходом. Я бы посмотрел на использование / proc / stat вместо этого. Я нашел статью под названием « Расчет загрузки процессора из / proc / stat », которая может решить большинство проблем за вас.
top -b -n1 | grep Cpu | sed -r 's@.+:\s([0-9\.]+).+@\1@'
Как уже было сказано, опция -b вместе с -n 1 даст один текстовый вывод сверху, а не постоянно обновляемое значение по умолчанию. Затем вы можете обратиться к sed, чтобы найти значение, которое вы ищете.
Это займет немного времени, потому что, похоже, существует буфер, который необходимо заполнить, прежде чем трубы начнут работать.
Сначала попробуйте с небольшим количеством итераций (примечание: -n2 означает 2 итерации):
top -b -d1 -n2 | grep Cpu | cut -c 35-39
Относительно вашего комментария: если вы перенаправите стандартный вывод в файл с top -b -d 1 > file.csv
, вы не сможете стандартный вывод в команду grep.
См .:
echo "Standard output" | grep "out"
против
echo "Standard output" >/tmp/foo | grep "out"
Во втором случае у вас нет вывода.