unix 需要过滤超过4天的lpstat输出

rqcrx0a6  于 2022-12-12  发布在  Unix
关注(0)|答案(1)|浏览(151)

我们需要过滤超过4天的lpstat -o输出。我们需要使用shell脚本或awk命令来完成此操作。如果您能帮助我们,我们将非常感谢。
示例当前日期是12月8日,我们使用lpstat -o命令得到以下输出。

XXXX-CB05-2513315      xyzadm            5120   Sun 01 Dec 2022 12:23:22 AM UTC
YYYY-AR19-2519281      xyxadm            2048   Wed 02 Dec 2022 09:38:26 AM UTC
YYYY-BC19-2519281      xyxadm            2048   Wed 04 Dec 2022 09:38:26 AM UTC
ZZZZ-PU05-2520131      xyzadm            2048   Wed 07 Dec 2022 02:19:40 PM UTC

我们需要最终输出

XXXX-CB05-2513315
YYYY-AR19-2519281
YYYY-BC19-2519281

Ravi Pandey敬上
我们尝试使用awk,我们能够过滤打印机名称,我们需要比较日期和过滤输出的逻辑。

fae0ux8s

fae0ux8s1#

我将利用GNU AWK来完成以下任务,让command的输出为

XXXX-CB05-2513315      xyzadm            5120   Sun 01 Dec 2022 12:23:22 AM UTC
YYYY-AR19-2519281      xyxadm            2048   Wed 02 Dec 2022 09:38:26 AM UTC
YYYY-BC19-2519281      xyxadm            2048   Wed 04 Dec 2022 09:38:26 AM UTC
ZZZZ-PU05-2520131      xyzadm            2048   Wed 07 Dec 2022 02:19:40 PM UTC

然后

command | awk 'BEGIN{months["Jan"]="01";months["Feb"]="02";months["Mar"]="03";months["Apr"]="04";months["May"]="05";months["Jun"]="06";months["Jul"]="07";months["Aug"]="08";months["Sep"]="09";months["Oct"]="10";months["Nov"]="11";months["Dec"]="12";cutoff=strftime("%Y%m%d",systime()-345600)}($7 months[$6] $5)<=cutoff{print $1}'

给出(今天)输出

XXXX-CB05-2513315
YYYY-AR19-2519281
YYYY-BC19-2519281

说明:在BEGIN中,我创建了一个数组months,我填充了这个数组,这样我就可以用它来将字母形式的月份转换为数字形式的月份,并计算截止值--或者计算第4天前的日期,我利用Time Functions,从纪元开始算起,取当前时间(以秒为单位),然后从中减去345600,由于4天= 345600秒(4*24*60*60),我将日期标准化为YYYYMMDD日期-使用strftime(在BEGIN中)并获取和处理列(对于每一行)。注意到格式日期的选择是选择(而不是心血来潮),因为在YYYYMMDD中,单位从最大到最小排序:year,month,day,因此它们可以作为给出预期结果的字符串数进行比较。对于day等于或小于(即,相同或早于)cutoff的每一行,第一列($1)。

  • (在GNU Awk 5.0.1中测试)*

相关问题