여러 명령을 사용하는 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다음 쉘 코드를 사용하여 나머지 작업을 수행합니다. 이는 서브셸 내에서 실행되며 echo서브 sar | awk셸의 전체 출력은 다음으로 리디렉션됩니다.utilisation.txt

free시스템에 없고 top -M -n 1작동하는 경우 다음 줄을 첫 번째 줄로 사용하세요.

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

관련 정보