複数のコマンドを使用するawkコマンド

複数のコマンドを使用するawkコマンド

以下のコードを試してみると、次のエラーが発生します。

+ 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

両方の出力をファイルにリダイレクトするにはどうすればよいですか?

答え1

一般的に不要grep .. | awk ..| awk

私は変わるgrep "Mem" | awk '{print 0 + $7}' | awk '{ print $1 / 1024 }'

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

から始めます

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

答え2

top -M -n 1効果は何ですか?私のシステムでは、-Mこのオプションは無効です。システムで使用されるメモリ量をメガバイト単位で取得したいとしますか?この場合、そのタスクを実行できるプレーンテキストツールがあるため、アプリケーションからデータを抽出するfree代わりにncursesを使用するのは愚かです。toptopfree

free -mとにかく、サンプルスクリプトでこれを使用します。

Archemarの操作に基づいて、重複したgrepおよび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

awkを使用してすべての操作を実行するのではなく、出力からawkメモリ使用量データを抽出し、free -mシェルコードを使用して残りの操作を実行します。これはサブシェル内で実行され、サブシェルechosar | awk完全な出力は次にリダイレクトされます。utilisation.txt

freeシステム上でtop -M -n 1動作しない場合は、次の行を最初の行として使用してください。

mem=$(top -M -n1 | awk '/Mem/ {print $7}')

関連情報