【发布时间】:2018-05-23 09:43:09
【问题描述】:
以下数据位于 .csv 文件中,该文件会随着新数据的下载而更改。 数据的语法始终为 YYYY-MM-DDTHHMMSS,示例如下:
2017-12-08T194949
2017-12-08T194952
2017-12-08T195000
2017-12-08T195007
2017-12-08T195007
2017-12-08T195014
2017-12-08T195016
2017-12-08T195016
2017-12-08T195016
2017-12-08T195016
2017-12-08T195021
2017-12-08T195026
2017-12-08T195029
2017-12-08T195030
2017-12-08T195030
2017-12-08T195034
2017-12-08T195051
2017-12-08T195101
2017-12-08T195105
2017-12-08T195135
2017-12-08T195138
2017-12-08T195140
2017-12-08T195144
2017-12-08T195148
2017-12-08T195154
2017-12-08T195204
2017-12-08T195205
2017-12-08T195219
2017-12-08T195223
2017-12-08T195224
2017-12-08T195225
目前,我使用以下方法定义我的日期字符串:
lower_bound=`date -d '1 day ago' "+%Y-%m-%dT%H%M%S"`
upper_bound=`date -d '12 hours ago' "+%Y-%m-%dT%H%M%S"`
我回顾文件的分钟数取决于系统时间。我可以将我的回溯量设置为任意值。
我认为我已经接近 sed/awk 如下:
sed -n "/$lower_bound/,/$upper_bound/p" data.csv
awk -v a="$lower_bound" -v b="$upper_bound" '/a/{flag=1;next}/b/{flag=0}flag' data.csv
鉴于这些回溯字符串,上面的命令应该打印出两个变量 $lower_bound 和 $upper_bound 之间的日期范围。显然,我在上述变量中尝试了不同的回溯时间。
关于为什么不打印日期范围的任何想法?任何帮助将不胜感激;提前谢谢你。
【问题讨论】:
-
$date 出错 - 我提供了更多示例数据并更改了日期定义语法(见上文)
-
不是最佳的,但应该比你拥有的更好:
awk -v a="$lower_bound" -v b="$upper_bound" '$1>=a && $1<=b'. -
@gniourf_gniourf - 谢谢,这行得通。为日后参考,为什么要和$1做比较?
-
我认为你需要了解一点
awk。 tag info page中链接了一些资源。 -
/a/匹配a作为正则表达式而不是a作为变量。