awk comando com vários comandos

0

Quando eu estou tentando abaixo do código recebendo um erro como -

+ awk '{if ($1 > 1) 
{ print "Memory utilisation is high \n Please find history of the memory utilisation below" 
sar -r|awk {print' ',,,}| column -t } 
 }'
awk: cmd. line:2: sar -r|awk {print
awk: cmd. line:2:        ^ syntax error
awk: cmd. line:3: sar -r|awk {print

top -M -n1 | grep "Mem" | awk '{print 0 + $7}' | awk '{ print $1 / 1024 }' | awk '{if ($1 > 1)
{ print "Memory utilisation is high \n Please find history of the memory utilisation below"
sar -r|awk '{print $1,$2,$3,$4}'| column -t }
 }' >>/home/shyam/utilisation.txt

Alguém por favor pode me orientar como devo redirecionar duas saídas para o arquivo?

    
por Shyam 14.10.2015 / 06:37

2 respostas

2

Normalmente, não há necessidade de grep .. | awk ..| awk

Altero grep "Mem" | awk '{print 0 + $7}' | awk '{ print $1 / 1024 }'

  • para awk '/Mem/ {print 0 + $7}' | awk '{ print $1 / 1024 }'
  • para awk '/Mem/ {print 0 + $7/1024 }'
  • para awk '/Mem/ { if ( $7 > 1024 ) ...

Eu começaria com

top -M -n1 | awk '/Mem/ {if ($7 > 1024) { 
      print "Memory utilisation is high \n" ;
      print "Please find history of the memory utilisation below\n" ;
      print " sar -r|awk \'{print $1,$2,$3,$4}\'| column -t \" } }' >>/home/shyam/utilisation.txt
    
por 14.10.2015 / 07:08
0

O que top -M -n 1 faz? No meu sistema, -M é uma opção inválida. Eu suponho que você está tentando obter a quantidade de memória em uso no sistema (em megabytes)? Nesse caso, use free em vez de top - extrair dados de um aplicativo ncurses como top é bobagem quando existem ferramentas de texto simples como free para fazer o trabalho.

De qualquer forma, vou usar free -m no meu script de exemplo.

Desenvolvendo o trabalho do Archemar para eliminar excessivos comandos grep e awk:

mem=$(free -m | awk '/Mem:/ {print $3}')

if [ "$mem" -gt 1024 ] ; then (
    echo "Memory utilisation is high"
    echo "Please find history of the memory utilisation below"
    sar -r | awk '{print $1,$2,$3,$4}' | column -t
) >>/home/shyam/utilisation.txt
fi

Em vez de usar awk para fazer todo o trabalho, ele usa apenas awk para extrair os dados de uso de memória da saída de free -m e, em seguida, usa o código shell para fazer o resto. Ele executa echo e sar | awk dentro de um sub-shell, com toda a saída do sub-shell redirecionada para utilisation.txt

Se você não tiver free em seu sistema e top -M -n 1 funcionar para você, use-a como a primeira linha:

mem=$(top -M -n1 | awk '/Mem/ {print $7}')
    
por 14.10.2015 / 08:17

Tags