awk
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型のシェル(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]
}