Bash-Skript zum Extrahieren von Einträgen aus der Protokolldatei anhand der in einer anderen Datei angegebenen Daten?

Ich habe eine ziemlich große CSV-Protokolldatei mit Kommas als Trennzeichen (> 50000 Zeilen, nennen wir sie file1.csv), die ungefähr so aussieht:

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...
...

ie Sie sehen können, befindet sich in der Mitte ein Feld mit einem Zeitstempel.

Ich habe auch eine Datei (nennen wir sie file2.csv) mit einer kurzen Liste von Zeiten:

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

Ich möchte nur die Zeilen in file1.csv extrahieren, deren Zeiten in file2.csv angegeben sind.

Wie mache ich das mit einem Bash-Skript? Da file1.csv ziemlich groß ist, ist auch die Effizienz von Bedeutung. Ich habe zuvor sehr einfache Bash-Skripte geschrieben, weiß aber nicht, wie ich damit umgehen soll. Vielleicht eine Implementierung von awk? Oder gibt es einen anderen Weg?

P.S. Komplikation 1: Ich habe einige Einträge in beiden Dateien manuell überprüft, um sicherzustellen, dass sie übereinstimmen. Es muss nur eine Möglichkeit geben, das zusätzliche ".7" am Ende des Sekundenfeldes ("SS") in file1.csv zu entfernen (oder zu ignorieren).

P.P.S. Komplikation 2: Es stellt sich heraus, dass die Einträge in list1.csv alle etwa zwei Sekunden voneinander entfernt sind. Manchmal liegen die Zeitstempel in list2.csv genau zwischen zwei Einträgen in list1.csv! Gibt es in diesem Fall eine Möglichkeit, die nächstliegende Übereinstimmung zu finden?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage