按时间列过滤 CSV 文件

按时间列过滤 CSV 文件

我有具有以下结构的 csv 文件。它有 5 列。

2/3/2018    17:00:00    39.50755167 139.94117   72
.....
2/1/2018    1:00:00     37.67323333 140.0666667 48
......

我想过滤csv文件并选择2018年2月3日17:00:00之前发生的所有数据行并将过滤后的数据保存到新的csv文件中。

答案1

我假设您的日期是 MM/DD/YYYY(而不是 DD/MM/YYYY)。我假设您希望在外部指定截止值(硬编码)而不是基于第一行。

您可以在 gawk (GNU awk) 中执行此操作:

awk '
  BEGIN { cutoff = mktime("2018 2 3 17 0 0");
          if (cutoff < 0) { print "Bad cutoff date."; exit; } }
        {
            if (split($1, da, "/") == 3  &&  split($2, ti, ":") == 3) {
                thisdate = mktime(da[3] " " da[1] " " da[2] " " ti[1] " " ti[2] " " ti[3])
                if (thisdate >= 0  &&  thisdate < cutoff) print
            }
        }
    '

gawk 的mktime函数将“YYYY MM DD hh mm ss”形式的时间字符串转换为系统时间。我们首先 (BEGIN) 将 2/3/2018 17:00:00 转换为系统时间。然后,对于每一行,我们验证它是否包含有效的日期和时间,对其进行转换,并将其与截止值进行比较。

当然,如果您的文件确实是逗号分隔的,那么您应该使用-F,.

相关内容