如何生成大于500m的日志文件

如何生成大于500m的日志文件

我需要对awkshell 脚本的一部分进行微小的更改,以仅生成大于 500m 的日志文件...

请记住,该脚本可以在 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 类型的 shell(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]
}

相关内容