BASH passer une variable à grep produire des résultats différents

voix
0

Scénario:

echo $1 $n
while true 
do
  ps -aux | awk '{print $1 \t $3 \t $4 \t $11}'  > task.log
  while IFS=' ' read r
  do 
    echo $r
  done < task.log | grep $n | awk '/a/{sum+=$1} END{printTotal CPU Usage:, sum}' >> monitor2.log
  sleep $1
done

Ceci est un script simple pour voir l'utilisation du processeur par la sortie -aux résultat en task.log et laissez processus grep et awk il somme tout en entrant un mot-clé

Le problème est que le résultat est toujours quand je lance ./monitor1.sh 2 Firefox

CPU Utilisation totale: 0

Je l'ai testé si je mets grep remplacer n $ avec FireFox et non variable, la sortie est

CPU Utilisation totale: 1.1

Créé 27/11/2018 à 15:20
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
1

Dans votre script:

  • Vous nulle part assigner la variable « $ n », il est donc vide. Probablement que vous voulez dire utiliser n=$2ou simplement utiliser à la $2place variable de position
  • « task.log » ne sert à rien, si vous voulez utiliser teepour tuyau pour elle
  • Faire ps -axuet limiter les colonnes avec l' awkair étrange. pspeut formater la sortie par lui - même
  • Parsing ps | grepest mauvaise, utilisez pgreppour cela
  • ne pas oublier de citer les variables

Votre script après une fixation peut ressembler à ceci:

while true; do
  cpuusage=$(
      pgrep "$2" | 
      tee >(xargs ps -aux >task.log) | 
      xargs ps -o cpu% |
      awk '{sum += $1} END {print sum}'
  )
  echo "Total CPU Usage: $cpuusage" >> monitor2.log
  sleep "$1"
done
  • pgrep est une meilleure alternative à ps -aux | grep ...
  • xargspasse pgrepoutupt àps -o %cpu=
  • ps -o %cpu= imprime pour cent l'utilisation du processeur pour chaque processus
  • awk est utilisé pour résumer.
  • Ensuite , un simple écho joint à un monitor2.logfichier.
Créé 27/11/2018 à 17:52
source utilisateur

voix
0

Je suppose que vous êtes après quelque chose comme ceci:

ps aux | awk '$11 ~ /firefox/{ sum += $3 } END { print sum }'

Le awkdomaine des contrôles 11 de chaque rangée produite par pset si elle contient firefox, il exécute le associé {}bloc. Prenez garde, sur différents systèmes les pssorties sont différentes.

Vous voulez exécuter cela dans une watchcommande. Par exemple. comme celui - ci (remarquez comment vous pouvez éviter de citer l' enfer avec l'utilisation de variables awk).

ps-sum() { ps aux | awk -v regex=$1 '$11 ~ regex { sum += $3 } END { print sum }' ;}
export -f ps-sum

watch -x bash -c "ps-sum firefox"
Créé 27/11/2018 à 16:11
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more