以下のコードを試してみると、次のエラーが発生します。
+ 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を使用するのは愚かです。top
top
free
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
シェルコードを使用して残りの操作を実行します。これはサブシェル内で実行され、サブシェルecho
のsar | awk
完全な出力は次にリダイレクトされます。utilisation.txt
free
システム上でtop -M -n 1
動作しない場合は、次の行を最初の行として使用してください。
mem=$(top -M -n1 | awk '/Mem/ {print $7}')