首页 > 解决方案 > 希望使用命令计算第 1 列中某个日期范围内的第 6 列中的项目数

问题描述

所以我有一个包含 21 列的 CSV 文件。第 1 列是 author_ID,第 6 列是发布日期。我希望输出 2017 年 1 月 1 日 0:00 到 2017 年 12 月 31 日 24:00 日期范围内的 authors_ID 总数。所以基本上是 2017 年 author_ID 的总数。

标签: linuxunixawknlp

解决方案


您可以使用 awk 从第 6 列检查年份是否为 2017,如果是则打印第 1 列,并使用“sort -u”查找唯一条目。

例如

awk -F, '$6 ~ /..?\/..?\/2017 ..?:../ {print $1}' input.csv | sort -u

这基本上是说从第 6 列匹配一个或两个字符的任何行打印第一列,后跟一个 / 后跟任何一个或两个字符,后跟一个 /,然后是 2017 和一个空格,后跟任何一个或两个字符,然后一个冒号后跟任意两个字符。

编辑: 如果您的日期范围变得比一整年更具体(例如,从 02/27/2016 02:35 - 10/02/2018 21:15),您可以考虑将日期字符串 ( MM/DD/YYYY HH:MM) 转换为纪元时间戳 (自“时代”以来的秒数)并对此进行比较。 awk时间函数可以用于此操作。


推荐阅读