Ответ 1
Использование awk
:
ps -p 747 -o %cpu,%mem | awk 'NR>1'
Использование sed
:
ps -p 747 -o %cpu,%mem | sed 1d
Я использую определенную команду ps, а именно
ps -p <pid> -o %cpu, %mem
который дает мне результат, подобный
%CPU %MEM
15.1 10.0
Все, что я хочу сделать, это просто напечатать эти цифры, такие как 15.1 и 10.0 без заголовков. Я попытался использовать "разрез". Но, похоже, это работает на каждой линии.
i.e
echo "$(ps -p 747 -o %cpu,%mem)" | cut -c 1-5
дает что-то вроде
%CPU
8.0
Как получить только цифры без заголовков?
Использование awk
:
ps -p 747 -o %cpu,%mem | awk 'NR>1'
Использование sed
:
ps -p 747 -o %cpu,%mem | sed 1d
BSD (и более общий POSIX) эквивалент GNU ps --no-headers
немного раздражает, но с man-страницы:
-o Display information associated with the space or comma sepa- rated list of keywords specified. Multiple keywords may also be given in the form of more than one -o option. Keywords may be appended with an equals (`=') sign and a string. This causes the printed header to use the specified string instead of the standard header. If all keywords have empty header texts, no header line is written.
Итак:
ps -p 747 -o '%cpu=,%mem='
Что это.
Если вам когда-либо понадобится удалить первую строку из произвольной команды, хвост упростит:
ps -p 747 -o '%cpu,%mem' | tail +2
Или, если вы хотите быть полностью переносимым:
ps -p 747 -o '%cpu,%mem' | tail -n +2
Команда cut
представляет собой эквивалент столбчатых эквивалентов более простых команд на основе строк head
и tail
. (Если вы действительно хотите вырезать столбцы, это работает... но в этом случае вы, вероятно, этого не делаете: гораздо проще передать параметры -o
, которые вы хотите использовать в ps, в первую очередь, чем передавать дополнительные функции и пытаться вырезать их.)
Между тем, я не уверен, почему вы думаете, что вам нужно что-то сказать в качестве аргумента для эха, когда это имеет тот же эффект, что и управление им напрямую, и просто усложняет ситуацию. Например, следующие две строки эквивалентны:
echo "$(ps -p 747 -o %cpu,%mem)" | cut -c 1-5
ps -p 747 -o %cpu,%mem | cut -c 1-5
Используйте ps --no-headers
:
--no-headers print no header line at all
или используйте:
ps | tail -n +2
Уже выбрал победителя. Drats...
Если вы уже используете параметр -o
, вы можете указать заголовки для конкретных столбцов, которые вы хотите распечатать, поставив знак равенства после имени и имя столбца. Если вы поместите пустую строку, она не будет печатать заголовки:
Со стандартными заголовками (как и у вас):
$ ps -p $pid -o%cpu,%mem
%CPU %MEM
0.0 0.0
С пользовательскими заголовками (просто чтобы показать, как это работает):
$ ps -p $pid -o%cpu=FOO,%mem=BAR
FOO BAR
0.0 0.0
С нулевыми заголовками (обратите внимание, что он даже не печатает пустую строку):
$ ps -p $pid -o%cpu="",%mem=""
0.0 0.0