Поиск загрузки процессора из верхней команды

В настоящее время я использую

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-файле). Спасибо!

6
задан 18 October 2011 в 18:55

4 ответа

Для общего использования ЦП:

Если вы ТОЛЬКО хотите использовать ЦП в целом, вы можете попробовать это:

top -b -d1 -n1|grep -i "Cpu(s)"|head -c21|cut -d ' ' -f3|cut -d '%' -f1 > file1.csv

Это даст вам только ЦП значение и обновить один в файле. Если вы хотите добавить данные в файл (поскольку я вижу, что вы называете его CSV-файлом), вместо одного> используйте два, как >> file1.csv.

Для каждого потока и использования ЦП:

Сначала необходимо удалить остальные столбцы, чтобы было проще получить данные ЦП.

  1. Запустите top и нажмите f .
  2. В этом меню вы выбираете, какие столбцы вы хотите видеть, а какие нет. Для вашего случая оставьте только столбец CPU и имя (если вам нужно имя)
  3. Нажмите ESC , чтобы вернуться в главное меню Top и сохранить с помощью Capital W . ] изменение. Теперь вам легче разобрать команду.

Теперь для общего использования CPU у вас обычно есть другие инструменты, такие как ps, iostat и cat /proc/stat. Для каждого вам нужен другой анализ, например, используемый для top. Я написал здесь только для ТОПа, поскольку вы явно упомянули это в заголовке.

ПРИМЕЧАНИЕ : Следует отметить, что top - не самый эффективный способ увидеть использование ЦП или работать с ним при разборе значений для него. Для некоторых использование f2 в команде cut показывает значение, для других - f3

enter image description here

0
ответ дан 18 October 2011 в 18:55

Я думаю, что использование top может быть не лучшим подходом. Я бы посмотрел на использование / proc / stat вместо этого. Я нашел статью под названием « Расчет загрузки процессора из / proc / stat », которая может решить большинство проблем за вас.

0
ответ дан 18 October 2011 в 18:55
top -b -n1 | grep Cpu | sed -r 's@.+:\s([0-9\.]+).+@\1@'

Как уже было сказано, опция -b вместе с -n 1 даст один текстовый вывод сверху, а не постоянно обновляемое значение по умолчанию. Затем вы можете обратиться к sed, чтобы найти значение, которое вы ищете.

0
ответ дан 18 October 2011 в 18:55

Это займет немного времени, потому что, похоже, существует буфер, который необходимо заполнить, прежде чем трубы начнут работать.

Сначала попробуйте с небольшим количеством итераций (примечание: -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"

Во втором случае у вас нет вывода.

0
ответ дан 18 October 2011 в 18:55

Другие вопросы по тегам:

Похожие вопросы: