いくつかのログ情報を含む2つのcsvファイルがあります。 field1(file1)の行とfield2(file2)の行を1分の範囲(-00:00:01 <time <00:00:01)で比較し、field5(file1)をfield3(file2)と比較する必要があります。一致する場合は、field3(input2)を出力にコピーし、file1の次のフィールドを印刷し、そうでない場合は「NOACT」を書き込みます。awk
試しましたが成功しませんjoin
でしたpython
。
ファイル1(55,000,000行):
19:15:30.047315,184.125.142.179,87492,174.145.246.178,87961,.,7648919765,145,767942442,896450764,1
19:15:30.047578,184.125.142.185,87492,174.145.246.132,52364,.,7648919765,145,767942442,896450764,1
19:15:31.047315,184.125.142.145,87492,174.145.246.158,52364,.,7648919765,145,767942442,896450764,1
19:15:31.049687,184.125.142.145,87492,174.145.246.158,44444,.,7648919765,145,767942442,896450764,1
19:15:32.049687,184.125.142.145,87492,174.145.246.158,44454,.,7648919765,145,767942442,896450764,1
ファイル2(25000行):
19:15:30,187.173.121.63,42347,NOT
19:15:30,187.173.121.63,52364,OK
19:15:30,187.173.121.63,52364,OK
19:15:32,145.246.158,44444,NOT
予想出力:
19:15:30.047315,184.125.142.179,87492,174.145.246.178,87961,.,7648919765,145,767942442,896450764,1,NOACT
19:15:30.047578,184.125.142.185,87492,174.145.246.132,52364,.,7648919765,145,767942442,896450764,1,OK
19:15:31.047315,184.125.142.145,87492,174.145.246.158,52364,.,7648919765,145,767942442,896450764,1,NOACT
19:15:31.049687,184.125.142.145,87492,174.145.246.158,44444,.,7648919765,145,767942442,896450764,1,NOT
19:15:32.049687,184.125.142.145,87492,174.145.246.158,44454,.,7648919765,145,767942442,896450764,1,NOACT
はい
ファイル1:
A11 A12 A13 A14 A15 A16 A17 A18 A19 A110
A21 A22 A23 A24 A25 A26 A27 A28 A29 A210
A31 A32 A33 A34 A35 A36 A37 A38 A39 A310
ファイル2:
B11 B12 B13
B21 B22 B23
B31 B32 B33
B11がA11と一致することを確認し、そうである場合、B12がA15と一致することを確認する必要があります。そうであれば、出力の最初の行(outline1 = inputAline1&&B13)を書き、それ以外の場合はBの次の行に移動します。一致するものがない場合は、A&&「NOACT」の最初の行が記録されます。
ベストアンサー1
以下を使用してsqlite
データを結合できます。
$ sqlite3 <<EOT
.mode csv
CREATE TABLE file1 (A11,A12,A13,A14,A15,A16,A17,A18,A19,A110,A111);
CREATE TABLE file2 (B11,B12,B13,B14);
.import file1 file1
.import file2 file2
SELECT DISTINCT file1.*, ifnull(file2.B14,"NOACT") FROM file1 LEFT JOIN file2 ON abs(julianday(file1.A11) - julianday(file2.B11))*86400.0 < 1 AND A15 = B13;
EOT
これは作る:
19:15:30.047315,184.125.142.179,87492,174.145.246.178,87961,.,7648919765,145,767942442,896450764,1,NOACT
19:15:30.047578,184.125.142.185,87492,174.145.246.132,52364,.,7648919765,145,767942442,896450764,1,OK
19:15:31.047315,184.125.142.145,87492,174.145.246.158,52364,.,7648919765,145,767942442,896450764,1,NOACT
19:15:31.049687,184.125.142.145,87492,174.145.246.158,44444,.,7648919765,145,767942442,896450764,1,NOT
19:15:32.049687,184.125.142.145,87492,174.145.246.158,44454,.,7648919765,145,767942442,896450764,1,NOACT