我想过滤一个文件,并删除(或写入另一个文件(,只有日期"真实"小于日期现在的字符串,比如说 2 小时 30 分钟前(150 分钟(。我不需要可以找到绝对值"2017-03-21 04:36:19"之类的命令 - 然后删除之前的所有行。因为行不存在的可能性很大(秒,然后是分钟,此过滤器提供所有文件而不删除(。
我有下一个格式的数据:
2017-03-18 01:27:12 bla bla
2017-03-18 02:14:11 bla bla
2017-03-20 04:37:14 bla bla
2017-03-21 02:25:59 bla bla
2017-03-22 05:12:43 bla bla
时间格式:%Y-%m-%d %H:%M:%S
我在谷歌上搜索,并通过许多搜索查询在第一页上尝试所有内容。
awk -vdate=$(date -d "150 minutes ago" '+%Y-%m-%d%H:%M:%S')
'$1$2 >= date { print }' log
在 awk 中:
awk '
BEGIN{ now=systime() } # now in seconds
{
then=$1 " " $2 # then might not be a good var name though :)
gsub(/[-:]/," ",then) # making mktime fit variable out of then
then=mktime(then) # then then to seconds
if(then < now-604800) # compare, 604800 is 7 days in seconds
print # output older than that
}' file
2017-03-18 01:27:12 bla bla
2017-03-18 02:14:11 bla bla
2017-03-20 04:37:14 bla bla