私はAIXのerrptで今日と昨日のハードウェアエラー出力を見つけるためにシェルスクリプトを使用しています。出力を取得していますが、日付だけをgrepしてください。
例えば
tdy=`date +'%m/%d'`
etdy=`date +'%m%d%%y'`
ydy=`TZ=GMT+24 date +%m%d`
awk '{if ($2 ~ "'^$etdy'" && $4 == "H") print $0}' /tmp/errptoutput.txt > /tmp/errptoutput1.txt
awk '{if ($2 ~ "'^$ydy'" && $4 == "H") print $0}' /tmp/errptoutput.txt >> /tmp/errptoutput1.txt
====cat /tmp/errptoutput.txt
DC32143C 0709073116 P H ent8 PING TO REMOTE HOST FAILED
6169289D 0731073116 P H ent8 PING TO REMOTE HOST FAILED
DC32143C 0801073116 P H ent8 PING TO REMOTE HOST FAILED
========================================================================
grep
だから年だけでデートすればいいです(時間や分なし)。
ハードウェアの日付が0801073116
errpt にあるとします。
上記のスクリプトを使用して、目的の出力は%d%m%y
時間と分の代わりに080116(日付のみ)に基づいています。
上記のスクリプトで何を修正する必要がありますか?
ベストアンサー1
日付計算にGMT+24を使用する極端なケースがあると確信しています(AIXの日付の計算は困難です。)、しかし、ここでは、昨日の日付と今日の日付を一致させるパターンのawk文字列を生成するスクリプトに対する最小限の修正があります。オコココックAIX errptで使用される形式:
tdy=`date +'%m%d'`
tdyy=`date +%y`
ydy=`TZ=GMT+24 date +%m%d`
ydyy=`TZ=GMT+24 date +%y`
today="${tdy}....${tdyy}"
yesterday="${ydy}....${ydyy}"
awk -v today="$today" -v yesterday="$yesterday" \
'$2 ~ today || $2 ~ yesterday' /tmp/errptoutput.txt > /tmp/errptoutput1.txt
私が見つけたスペルエラーの1つは次のとおりです。
etdy=`date +'%m%d%%y'`
追加があります。また、月と日のみを出力するように日付文字列の形式を%
変更しました。他の追加点は、今日の年と昨日の年を収集し、前の月/日の値、その場所のすべての文字に一致する正規表現のピリオド、年を使用して変数を割り当てることです。tdy
etdy
today
yesterday
既存の出力ファイルを解析していますが、指定された日付範囲内の項目のみを出力するようにerrptに指示し、-s
flags-e
にも興味があります。たとえば、次のようになります。errpt
errpt -s 0731000016 -e 0801000016
2016年7月31日から2016年8月1日まで終了するすべてのエラーエントリが表示されます。出力をハードウェア障害にさらに制限するには、次のフラグを使用しますd
。
errpt -s 0731000016 -e 0801000016 -d H
バラよりhttps://www.ibm.com/support/knowledgecenter/ssw_aix_71/com.ibm.aix.cmds2/errpt.htm詳しくは、お住まいの地域のマニュアルページをご覧ください。