我有具有以下结构的 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,
.