системная команда для awk - PullRequest
       7

системная команда для awk

0 голосов
/ 12 ноября 2018

Задавал этот вопрос ранее, пытаясь выяснить, где разместить "в системной команде, и один пользователь предложил использовать escape-символы, как показано ниже, но все равно получал синтаксическую ошибку. Любые выводы приветствуются!

free -m | awk 'NR==2{
if (($3*100/$2)>=10.00){

  printf system("ps aux --sort=-%mem | awk \'NR==2{print $2}\'");

}
else
{
  printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 ; 
}
}'

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Вот другой подход, использующий один awk с заменой процесса:

awk 'NR == FNR {
    if (FNR == 2)
       if ($3*100/$2 > 10)
          p=1
       else
          printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2
    next
}
p && FNR == 2 {
   print $2
   exit
}' <(free -m) <(ps aux --sort=-%mem)
0 голосов
/ 12 ноября 2018

Как и комментарий tripleee, я полагаю, что мы могли бы использовать другой механизм (может быть в оболочке для вычислений), а затем могли бы написать что-то, вызывая awk внутри awk, это не так круто, если честно. Не могли бы вы попробовать следующий раз.

free -m | awk -v s1="'" 'NR==2{
if (($3*100/$2)>=10.00){
printf system("ps aux --sort=-%mem | awk " s1 "NR==2{print $2}" s1 );
}
else
{
  printf("Memory Usage: %s/%sMB %.2f%%\n", $3,$2,$3*100/$2)
}
}'

РЕДАКТИРОВАТЬ: В случае, если вы не хотите использовать переменную для хранения ', тогда используйте его восьмеричное представление следующим образом.

free -m | awk 'NR==2{
if (($3*100/$2)>=10.00){
printf system("ps aux --sort=-%mem | awk \047 NR==2{print $2} \047" );
}
else
{
  printf("Memory Usage: %s/%sMB %.2f%%\n", $3,$2,$3*100/$2)
}
}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...