我在服务器上使用centos并且我想在特定日期范围内计算文件的多行?我正在尝试调试我的程序。
2016-06-30T14:09:06+00:00
2016-06-30T14:09:06+00:00
2016-06-30T14:09:06+00:00
2016-06-30T14:09:06+00:00
2016-06-30T14:09:06+00:00
2016-06-30T14:09:07+00:00
2016-06-30T14:09:07+00:00
2016-06-30T14:09:07+00:00
2016-06-30T14:09:08+00:00
2016-06-30T14:09:08+00:00
如果我想计算从2016-06-30T14:09:06+00:00 - 2016-06-30T14:09:08+00:00
开始的日期范围内该文件中有多少行,那么现在数据会是这样的。那可能吗?
结果应为10
答案 0 :(得分:4)
只需正常比较它们:您可以使用字母数字比较比较您的时间戳并获得正确的答案 - 这是ISO 8601符号(source)的美妙。
awk -v ini="2016-06-30T14:09:06+00:00" -v end="2016-06-30T14:09:08+00:00" \
'$0>=ini && $0<=end {sum++} END{print sum}'
使用您的文件:
$ awk -v ini="2016-06-30T14:09:06+00:00" -v end="2016-06-30T14:09:08+00:00" '$0>=ini && $0<=end {sum++} END{print sum}' file
10
更具代表性的输入:
$ cat t
2015-06-30T14:09:06+00:00
2016-06-29T14:09:06+00:00
2016-06-30T14:09:05+00:00
2016-06-30T14:09:06+00:00
2016-06-30T14:09:07+00:00
2016-06-30T14:09:07+00:00
2016-06-30T14:09:08+00:00
2016-06-30T14:09:09+00:00
2016-06-30T14:10:08+00:00
2016-07-30T14:09:08+00:00
$ awk -v ini="2016-06-30T14:09:06+00:00" -v end="2016-06-30T14:09:08+00:00" '$0>=ini && $0<=end' t
2016-06-30T14:09:06+00:00
2016-06-30T14:09:07+00:00
2016-06-30T14:09:07+00:00
2016-06-30T14:09:08+00:00
答案 1 :(得分:2)
使用带有grep
标记的-c
来获取实例数,这要归功于评论中的建议。
grep -c 2016-06-30T14:09:0[6-8]+00:00 file
模式[6-8]
,一个正则表达式,用于匹配文件中2016-06-30T14:09:06+00:0
和2016-06-30T14:09:08+00:0
之间的所有日志。
使用grep
获取内容,awk
打印行数
grep 2016-06-30T14:09:0[6-8]+00:00 file | awk 'END{print NR}'
10
还可以使用bash
字数wc
util,这比评论中karakfa
建议的awk
快。
grep 2016-06-30T14:09:0[6-8]+00:00 file | wc -l
10