gpt4 book ai didi

linux - awk 更新重复数据的时间戳

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:58:27 25 4
gpt4 key购买 nike

给定如下命令行,

tail -f /var/log/somelog.log | awk '$2>100 {if (!($1 in a)) print $1, strftime ("%Y-%m-%d %H:%M:%S"); a[$1]=1; system("")}' > /var/log/filtered.log

此命令获取 somelog.log 文件并在 $2 大于 100 且文件中不存在 $1 时实时输出 $1 并添加时间戳。

我想要它做的是,每次重复数据进来时更新时间戳。

手动运行这样的命令会产生所需的结果

awk -v s="output from above command here" '/^"first field from above command"/{f=1;$0=s}7;END{if(!f)print s}' /var/log/filtered.log

例如,输入 s=111111 04-25-2014 01:00:00 和 ^111111 会导致“111111 04-25-2014 01:00:00”被添加到文件中,因为它不存在。

输入 s=111111 04-25-2014 02:00:00 和 ^111111 会导致“111111 04-25-2014 01:00:00”被 111111 04-25-2014 02:00:00 覆盖是想要的结果

但是..我如何组合这两个命令?我已经尝试了以下不起作用的测试

tail -f /something.log | awk -v s=$0 '/^$1/{f=1;$0=s}7;END{if(!f)print s}'

编辑:澄清

给定以下输入,滚动到日志文件 [不在文件中]。

1111111 3490349 daaaaaaaaaaaaaaaaaaaattttttttttttaaaaaaaaaaaaaaaaa [added 01:00:00am]
2103322 424 daaaaaaaaaaaaaaaaaaaattttttttttttaaaaaaaaaaaaaaaaa [added 02:00:00am]
1323233 233444 daaaaaaaaaaaaaaaaaaaattttttttttttaaaaaaaaaaaaaaaaa [added 03:00:00am]
1111111 2212223 daaaaaaaaaaaaaaaaaaaattttttttttttaaaaaaaaaaaaaaaaa [added 04:00:00am]

如果 b 列 > 100000、数字、最新时间戳,我希望在输出文件中

1323233 04-24-2014 03:00:00
1111111 04-24-2014 04:00:00

谢谢

最佳答案

你没有在输出中显示日期的来源,因为它不存在于你的输入中,所以我忽略了这一点,但这应该让你非常接近你需要的:

$ cat file
1111111 3490349 daaaaaaaaaaaaaaaaaaaattttttttttttaaaaaaaaaaaaaaaaa [added 01:00:00am]
2103322 424 daaaaaaaaaaaaaaaaaaaattttttttttttaaaaaaaaaaaaaaaaa [added 02:00:00am]
1323233 233444 daaaaaaaaaaaaaaaaaaaattttttttttttaaaaaaaaaaaaaaaaa [added 03:00:00am]
1111111 2212223 daaaaaaaaaaaaaaaaaaaattttttttttttaaaaaaaaaaaaaaaaa [added 04:00:00am]

$ awk '
$2>100000 {
keys[$1]
sub(/.m\]/,"")
time[$1]=$NF
}
END {
for (key in keys)
print key, time[key]
}
' file
1111111 04:00:00
1323233 03:00:00

关于linux - awk 更新重复数据的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23297375/

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