ログファイルがあり、ファイルの複数行にわたって複数の文字列を検索するシェルスクリプトを作成しようとしています。
たとえば、ログにandという句がある場合は、"class=com.comcast.parker.GetCurrentAudioLanguageResponse"
elseを印刷する必要があります。私のシェルスクリプトは次のとおりです。"status:OK"
getAudioLanguage SUCCESSFUL
getAudioLanguage FAILED
logfile=$1
if grep "{\"class\":\"com.comcast.parker.GetCurrentAudioLanguageResponse\"" jags.txt | grep "{\"status\":\"OK\"" | wc -l ; then
echo "getAudioLanguage SUCCESSFUL"
fi
if grep "{\"class\":\"com.comcast.parker.GetCurrentAudioLanguageResponse\"" $logfile | grep -q "GENERAL_ERROR" | wc -l ; then
echo "getAudioLanguage FAILED"
fi
ログにはGENERAL_ERROR
印刷が必要な状態が表示されますが、FAILED
出力は..と表示されますgetAudioLanguage SUCCESSFUL
。
ログファイル:
160125-11:11:28.442500 [mod=SYS, lvl=INFO] [tid=2332] ======= Message is onRPCCall ======>
160125-11:11:28.442614 [mod=SYS, lvl=INFO] [tid=2332] Entering onRPCCallEvent for request ---> getAudioLanguage
160125-11:11:28.442845 [mod=SYS, lvl=INFO] [tid=2332] Received json request = {"event":1,"handler":1,"name":"onRPCCall","params":{"callGUID":"d75a5bab-6b29-4ab4-9f7e-3cf32d4a05b1","callParams":[{"getAudioLanguage":{}}],"class":"com.comcast.xre.events.XRERPCCallInfo","destinationSessionGUID":"ab00ebea-5f63-4619-9877-273a2bceea1d","method":"getAudioLanguage","sourceSessionGUID":"ab00ebea-5f63-4619-9877-273a2bceea1d"},"phase":"STANDARD","source":1}
160125-11:11:28.442920 [mod=SYS, lvl=INFO] [tid=2332] GetCurrentAudioLanguage : Entered
160125-11:11:28.442968 [mod=SYS, lvl=INFO] [tid=2332] pMainPlayer is NULL.
160125-11:11:28.443012 [mod=SYS, lvl=INFO] [tid=2332] getAudioLanguage: Get Audio Language returned ��v`> T�= T0~�t
160125-11:11:28.443676 [mod=SYS, lvl=INFO] [tid=2332] ====== Response sending is {"appId":1,"command":"CALL","commandIndex":5,"method":"generateAppEvent","params":[{"class":"com.comcast.xre.events.XREOutgoingEvent","name":"onRPCReturn","params":{"callGUID":"d75a5bab-6b29-4ab4-9f7e-3cf32d4a05b1","class":"com.comcast.xre.events.XRERPCReturnInfo","destinationSessionGUID":"ab00ebea-5f63-4619-9877-273a2bceea1d","method":"getAudioLanguage","returnVal":{"class":"com.comcast.parker.GetCurrentAudioLanguageResponse","status":"GENERAL_ERROR","statusMessage":"Getting Current Audio Language was unsuccessful."},"sourceSessionGUID":"ab00ebea-5f63-4619-9877-273a2bceea1d"}},"ab00ebea-5f63-4619-9877-273a2bceea1d"],"targetId":1,"targetPath":"","timestamp":0}
ベストアンサー1
AWKを使用する方が簡単です。
awk '/GetCurrentAudioLanguageResponse/ && /status\"\:\"GENERAL_ERROR/{ print "FAIL" } /GetCurrentAudioLanguageResponse/ && /status\":\"OK/ {print "SUCCESS"} ' log.txt
このコードでは、2つのパターンを一致させ、パターンが一致した場合は中かっこ内の内容を実行します。の場合はGetCurrentAudioLanguageResponse
「status":"GENERAL_ERROR
失敗」を印刷し、モードの場合は「成功」を印刷しますGetCurrentAudioLanguageResponse
。status\":\"OK