import fs from 'node:fs/promises'; import * as zlib from "zlib"; import readline from 'node:readline'; let currentTime = 1593561599000; await fs.appendFile("test.csv", "timestamp,bid\n"); for await (const dayFile of fs.glob("./binance-btcusdt-futures-2020-2021/*.csv.gz")) { console.log("Reading", dayFile, "..."); let outputRows = []; const fd = await fs.open(dayFile); let lineReader = readline.createInterface({ input: fd.createReadStream().pipe(zlib.createGunzip()) }); let n = 0; for await (const line of lineReader) { if (n > 0) { let lineParts = line.split(','); let timestamp = parseInt(lineParts[1]); if (timestamp >= currentTime + 1000) { currentTime = Math.floor(timestamp / 1000) * 1000; outputRows.push([unixTime(currentTime), lineParts[3]]); } } n++; } console.log("Done"); let output = ""; outputRows.forEach((row) => { output += row.join(",") + "\n"; }); await fs.appendFile("test.csv", output); lineReader.close(); } function unixTime(unixtime) { var u = new Date(unixtime); return u.getUTCFullYear() + '-' + ('0' + (u.getUTCMonth() + 1)).slice(-2) + '-' + ('0' + u.getUTCDate()).slice(-2) + ' ' + ('0' + u.getUTCHours()).slice(-2) + ':' + ('0' + u.getUTCMinutes()).slice(-2) + ':' + ('0' + u.getUTCSeconds()).slice(-2); }