У меня есть довольно большой файл журнала 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?Или есть другой способ?
PS Осложнение 1: я вручную проверил некоторые записи в обоих файлах, чтобы убедиться, что они совпадают, и они соответствуют.Нужно просто найти способ удалить (или проигнорировать) лишнее поле «.7» в конце секунд («SS») в file1.csv.
PPS Complication 2: исключает записив list1.csv все разделены примерно двумя секундами.Иногда метки времени в list2.csv попадают прямо между двумя записями в list1.csv!Есть ли способ найти наиболее близкое совпадение в этом случае?