我正在使用 shell 脚本从 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
我注意到的一个拼写错误是:
etdy=`date +'%m%d%%y'`
你有一个额外的%
.我还更改了tdy
和日期字符串的格式,etdy
以便它们仅输出月份和日期。我的其他添加内容是收集今天的年份和昨天的年份,然后使用之前的月/日值、正则表达式的句点来匹配这些位置中的任何字符,然后是年份来分配变量today
。yesterday
我看到您正在解析现有的输出文件,但您可能也对-s
和-e
标志感兴趣errpt
,它们告诉 errpt 仅输出给定日期范围内的条目,例如:
errpt -s 0731000016 -e 0801000016
将显示从 2016 年 7 月 31 日开始到 2016 年 8 月 1 日结束的所有 errpt 条目。要另外将输出限制为硬件错误,请使用以下标志d
:
errpt -s 0731000016 -e 0801000016 -d H
看https://www.ibm.com/support/knowledgecenter/ssw_aix_71/com.ibm.aix.cmds2/errpt.htm或您本地的手册页了解更多详细信息。