我有一个相当大的逗号分隔 CSV 日志文件(>50000 行,我们称之为 file1.csv),看起来像这样:
field1,field2,MM-DD-YY HH:MM:SS,field4,field5...
...
field1,field2,07-29-10 08:04:22.7,field4,field5...
field1,field2,07-29-10 08:04:24.7,field4,field5...
field1,field2,07-29-10 08:04:26.7,field4,field5...
field1,field2,07-29-10 08:04:28.7,field4,field5...
field1,field2,07-29-10 08:04:30.7,field4,field5...
...
正如你所看到的,中间有一个字段是时间戳。
我还有一个文件(我们称之为 file2.csv),其中包含一个简短的时间列表:
timestamp,YYYY,MM,DD,HH,MM,SS
20100729180031,2010,07,29,18,00,31
20100729180039,2010,07,29,18,00,39
20100729180048,2010,07,29,18,00,48
20100729180056,2010,07,29,18,00,56
20100729180106,2010,07,29,18,01,06
20100729180115,2010,07,29,18,01,15
我想做的是仅提取 file1.csv 中具有 file2.csv 中指定时间的行。
如何使用 bash 脚本执行此操作?由于 file1.csv 相当大,因此效率也是一个问题。我以前做过非常简单的 bash 脚本,但真的不知道如何处理这个问题。也许 awk 的一些实现?或者还有别的办法吗?
附:并发症 1:我手动抽查了两个文件中的一些条目,以确保它们匹配,结果确实匹配。只需要找到一种方法来删除(或忽略)file1.csv 中秒(“SS”)字段末尾的额外“.7”。
附言并发症 2:结果 list1.csv 中的条目都间隔大约两秒。有时,list2.csv 中的时间戳恰好位于 list1.csv 中的两个条目之间!在这种情况下有没有办法找到最接近的匹配?