awk: Извлечение постоянного числа строк, где последний номер строки может варьироваться

хорошо одна опция является Набором Настройки Ubuntu, другой опцией был бы Linux С нуля (вещь состоит в том, что они точно "не клонируются") (3-е редактирование моего ответа, продержитесь один): возможно, это помогает также http://answers.yahoo.com/question/index?qid=20090513192052AASI4hv

3
14.09.2014, 18:28
2 ответа

Это не отвечает на ваш вопрос,
но это решает проблему, которую вы пытаетесь решить, совершенно другим способом:

Полная команда такова (см. ниже пример вывода):

ps -o comm,%cpu,%mem --sort -%cpu -A | head -6

Я опишу ее части:

  • используя ps, чтобы иметь больше контроля над выводом
  • Печать только трех столбцов, которые нам нужны с -o comm,%cpu,%mem
  • Make ps сортируем данные внутренне -сортируем -%cpu, по процессору, в обратном направлении.
  • Перечислите все процессы с -A
  • Покажите заголовок и первые 5 строк результата по | заголовок -6

Вывод аналогичен выводу вашей первой команды:

$ ps -o comm,%cpu,%mem --sort -%cpu -A | head -6
COMMAND         %CPU %MEM
firefox          8.9 15.5
Xorg             1.3  5.6
parcellite       0.3  1.6
compiz           0.2  1.8
konsole          0.1  0.9

Процесс ps перечислен в полном списке - его можно исключить на основе родительского PID.

Если мы хотим исключить процессы top в другом месте, мы можем сделать это на основе имени команды.

Выбор -A всех процессов будет заменен на -N ... :

ps ... -N --ppid $$ -C top

Так как теперь нам нужно исключить процессы, мы используем -N, чтобы выбрать все другие процессы, кроме тех, которые нам подходят.

Чтобы исключить ps, мы используем в качестве родительского процесса текущую интерактивную оболочку, так что она будет иметь родительский pid, PPID оболочки. PID текущей оболочки равен $$.
Так что --ppid $$ соответствует всем дочерним процессам текущей оболочки, и мы знаем, что будет только один, ps.

Мы также хотим исключить процессы top, которые могут работать на других дисплеях на той же машине. Мы делаем это, сопоставляя имя команды с -C top.

Полная команда с исключением самого процесса ps (и только это) и всех процессов top будет:

ps -o comm,%cpu,%mem --sort -%cpu -N --ppid $$ -C top | head -6
6
27.01.2020, 21:09
top command | awk 'BEGIN { print header; count=5}
                   NR>=8 { if ($0 ~ /your top regex/) next;
                           print fields; if (--count == 0) exit}'

На каждой строке, начинающейся с #8, если она совпадает с верхней , игнорируйте ее. В противном случае, распечатайте ту часть, которая вам нужна. В пятый раз, когда вы печатаете строку (которая не совпадает с top), выйдите.

5
27.01.2020, 21:09

Теги

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