아래 코드를 시도하면 다음과 같은 오류가 발생합니다.
+ 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}')