それぞれ 2 行ずつペアになっているログ エントリがあります。最初の行を解析して数値を抽出し、5000 より大きいかどうかを確認する必要があります。この数値が 5000 より大きい場合は、2 行目を返す必要があり、これも解析して ID を取得します。
すべての情報を grep して解析する方法を知っています。特定の値よりも小さい場合、grepに無視させる方法がわかりません。awk/sed などの他の手段で代用できる場合は、grep を使用することにコミットしていないことに注意してください。
生データ(例をわかりやすくするために 2 行で区切られています)。
私のgrepのターゲットは、「クレジットが抽出された=」に続く数字5001です。これが5000を超える場合、2行目から数字「12345」を返したい---------------- ----------
2012-03-16T23:26:12.082358 0x214d000 DEBUG ClientExtractAttachmentsPlayerMailTask for envelope 22334455 finished: credits extracted = 5001, items extracted count = 0, status = 0. [Mail.heomega.mail.Mail](PlayerMailTasks.cpp:OnExtractAttachmentsResponse:944)
2012-03-16T23:26:12.082384 0x214d000 DEBUG Mail Cache found cached mailbox for: 12345 [Mail.heomega.mail.Mail](MailCache.cpp:GetCachedMailbox:772)
スニピット--------------------------
-- コンマ ノイズなしで、抽出されたクレジットの数を見つけます。
grep "credits extracted = " fileName.log | awk '{print $12}' | awk -F',' '{print $1}'
-- 抽出されたクレジットの値に関係なく、2 行目の ID を見つけます。
grep -A1 "credits extracted = " fileName.log | grep "cached mailbox for" | awk -F, '{print $1}' | awk '{print $10}'
-- 取得する必要があるロジックを象徴する「if」ステートメント:
v_CredExtr=5001; v_ID=12345; if [ $v_Cred -gt 5000 ]; then echo $v_ID; fi;