500m보다 큰 로그 파일을 생성하는 방법

500m보다 큰 로그 파일을 생성하는 방법

awk500m보다 큰 로그 파일만 생성하려면 쉘 스크립트의 일부를 약간 변경 해야 합니다 .

이 스크립트는 Sun, AIX, HP-UX, 다양한 Unix 및 Windows 버전에서 실행된다는 점을 기억하세요.

스크립트는 다음과 같습니다.

# command for gathering Listener Log
set v_listener_command "
echo '            Listener Log' | tr '\\n' ':'; echo '' | tr '\\n' ' '
lsnrctl status | grep Log | awk '{ print \$4 }' | sed 's/alert\\/log.xml/trace\\/listener.log/g' | tr '\\n' ' '
echo '-' | tr '\\n' ' ' ; du -sk `lsnrctl status | grep Log | awk '{ print \$4 }' | sed 's/alert\\/log.xml/trace\\/listener.log/g'` | awk '{if ( \$1 / 1024 + 0.5 >= 500 ) print $1 }' | tr '\\n' ' '
echo '(Mb)'

실수:

can't read "1": no such variable while executing
"set v_listener_command "
echo '            Listener Log' | tr '\\n' ':'
echo '' | tr '\\n' ' ' 
lsnrctl status | grep Log | awk '{ print \$4 }' | s..."
(file "/CTM/ctmuser/scripts/GetDBLog/exec_sshlogin_don.exp" line 101)]

답변1

그것은 매우 고통스러웠습니다.

  • 기능을 사용하세요. 코드를 변수에 집어넣으려고 하지 마세요. 나는 당신이 POSIX 유형의 쉘(sh, bash, ksh, ...)을 사용하고 있다고 가정하지만, 틀릴 수도 있습니다.
  • 필요한 정보를 캡처하고 printf대신 이러한 모든 echo | tr시퀀스를 사용하십시오.

이는 더욱 단순화될 수 있습니다.

v_listener_command() {
    log=$( lsnrctl status | awk '/Log/ {print $4}' | sed 's,alert/log.xml,trace/listener.log,g' )
    size=$( du -sk "$log" | awk '$1 / 1024 + 0.5 >= 500 {print $1}' )
    printf '            Listener Log: %s - %s (Mb)\n' "$log" "$size"
}

아, 예상된 대본이군요.

proc v_listener_command {} {
    set log [exec lsnrctl status | awk {/Log/ {print $4}}] 
    set log [string map {alert/log.xml trace/listener.log} $log]

    set size [exec du -sk $log | awk {$1 / 1024 + 0.5 >= 500 {print $1}}]

    puts [format "            Listener Log: %s - %s (Mb)\n" $log $size]
}

관련 정보