Проблемы:
-n
: sort -nrk 2
. В противном случае строка со значением 5,0 % CPU
окажется выше, чем строка со значением 12,0. ps
вы можете использовать параметр - no-headers
, чтобы избавиться от grep -v
. Это не позволяет вам отбрасывать команды, содержащие PID
. echo ИСПОЛЬЗОВАНИЕ ЦП находится в $ CPU_LOAD
, вы имели в виду echo ИСПОЛЬЗОВАНИЕ ЦП в $ CPU_USAGE
. exit 0
, который вы вставили во время отладки (?). Стиль:
CPU_USAGE_THRESHOLD = 800
в начало файла, так как это наиболее информативная вещь, и она, скорее всего, будет изменена даже после того, как ваш скрипт станет стабильным. . -e
: ps -eo pid -eo pcpu -eo command
то же самое, что ps -eo pid -o pcpu -o command
(как и ps -eo pid, pcpu, command
). else
. Это всегда выглядит так, как будто с этим нужно справиться, но не по какой-то неизвестной причине. Вы поместили логику ограничения строки в блок "BEGIN", который выполняется до того, какawk
считывает какие-либо данные. Переместите эту логику в основной цикл:
NR >= 7 && NR <= 13 && /word/ { print }
$0
является аргументом print
по умолчанию, если он не указан... или, даже короче, как
NR >= 7 && NR <= 13 && /word/
, так как {print}
является действием по умолчанию, если ничего не указано.
Основная часть сценария awk
имеет форму «шаблон» «действие»; вы хотите, чтобы шаблон префиксил действие, которое вы хотите. Здесь шаблон требует, чтобы три теста были истинными, а действие заключалось в печати строки. Размещение print
в отдельной строке означает, что при "прохождении" тестов не происходит "действия", и нет "шаблона" для печати каждой строки --, в результате чего печатается каждая строка.
Просто дополняю ответ Джеффа ответом, написанным вsed
:
sed -n '7,13 { /expression/ p; }' <file
Это напечатает каждую строку между строками 7 и 13 (включительно ), которая соответствует регулярному выражению expression
. Вывод по умолчанию отключен с помощью -n
, поэтому будут выводиться только строки, явно напечатанные с помощью команды p
.
Прямой перевод приведенного выше сценария sed
наawk
:
awk 'NR == 7, NR == 13 { if (/expression/) print }' <file
Условие NR == 7, NR == 13
следует читать как «из любой входной записи, для которой NR
равно 7, в любую входную запись, для которой NR
равно 13», где «входная запись» по умолчанию — это строка и NR
— количество записей (строк ), прочитанных на данный момент.