gpt4 book ai didi

awk - 如何打印日期早于两天的文本行

转载 作者:行者123 更新时间:2023-12-02 22:31:01 25 4
gpt4 key购买 nike

我有以下正在使用的文本文件,当 creationdatetime 超过两天时,我必须能够仅解析对象名称值。

objectname ...........................: \Path\to\file\hpvss-LUN-22May12 22.24.11\hpVSS-LUN-29Aug12 22.39.15
creationdatetime .....................: 01-Sep-2012 02:17:43
objectname ...........................: \Path\to\file\hpVSS-LUN-22May12 22.24.11\hpVSS-LUN-28Aug12 22.16.19
creationdatetime .....................: 03-Sep-2012 10:18:09
objectname ...........................: \Path\to\file\hpVSS-LUN-22May-12 22.24.11\hpVSS-LUN-27Aug12 22.01.52
creationdatetime .....................: 03-Sep-2012 10:18:33

上述命令的输出为:

\Path\to\file\hpvss-LUN-22May12 22.24.11\hpVSS-LUN-29Aug12 22.39.15

任何帮助将不胜感激。

普雷姆

最佳答案

awk 中的日期解析有点棘手,但可以使用 mktime 完成。为了将月份名称转换为数字,定义了一个关联的翻译数组。

路径名中有空格,因此字段分隔符的最佳选择可能是 :(冒号后跟空格)。这是一个有效的 awk 脚本:

older_than_two_days.awk

BEGIN {
months2num["Jan"] = 1; months2num["Feb"] = 2; months2num["Mar"] = 3; months2num["Apr"] = 4;
months2num["May"] = 5; months2num["Jun"] = 6; months2num["Jul"] = 7; months2num["Aug"] = 8;
months2num["Sep"] = 9; months2num["Oct"] = 10; months2num["Nov"] = 11; months2num["Dec"] = 12;

now = systime()
two_days = 2 * 24 * 3600
FS = ": "
}

$1 ~ /objectname/ {
path = $2
}

$1 ~ /creationdatetime/ {
split($2, ds, " ")
split(ds[1], d, "-")
split(ds[2], t, ":")
date = d[3] " " months2num[d[2]] " " d[1] " " t[1] " " t[2] " " t[3]
age_in_seconds = mktime(date)

if(now - age_in_seconds > two_days)
print path
}

最后一个 block 中的所有拆分都是为了挑选出日期位并将它们转换为 mktime 接受的格式。

像这样运行它:

awk -f older_than_two_days.awk infile

输出:

\Path\to\file\hpvss-LUN-22May12 22.24.11\hpVSS-LUN-29Aug12 22.39.15

关于awk - 如何打印日期早于两天的文本行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12247306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com