给定命令行如下,
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文件,实时输出$ 1,如果$ 2大于100且文件中尚不存在$ 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
由于
答案 0 :(得分:1)
您没有在输出中显示日期的来源,因为它在您的输入中不存在,所以我忽略了这一点,但这应该让您非常接近您的需求:
$ 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