История изменений
Исправление
tz4678,
(текущая версия)
:
Тайко скрипт нормально обрабатывает огромные JSONL файлы и не выжирает память:
#!/usr/bin/env node
const fs = require('fs')
const readline = require('readline')
async function run() {
const input = process.argv.length > 3 ? fs.createReadStream(process.argv[2]) : process.stdin
const expr = process.argv.length > 3 ? process.argv[3] : process.argv[2]
const filter = Function('return ' + expr)
const rl = readline.createInterface({ input })
for await (line of rl) {
try {
const obj = JSON.parse(line)
const result = filter.call(obj)
if (result) {
console.log(obj)
}
} catch (e) {
console.error(e)
}
}
}
run()
$ filter-jsonl output/alexa.json 'this.headers.server === "Apache"'
https://gist.github.com/tz4678/499f14bbb0bfe32bbc61d8cec8235021
Исходная версия
tz4678,
:
Тайко скрипт нормально обрабатывает огромные JSONL файлы и не выжирает память:
#!/usr/bin/env node
const fs = require('fs')
const readline = require('readline')
async function run() {
const input = process.argv.length > 3 ? fs.createReadStream(process.argv[2]) : process.stdin
const expr = process.argv.length > 3 ? process.argv[3] : process.argv[2]
const filter = Function('return ' + expr)
const rl = readline.createInterface({ input })
for await (line of rl) {
try {
const obj = JSON.parse(line)
const result = filter.call(obj)
if (result) {
console.log(obj)
}
} catch (e) {
console.error(e)
}
}
}
run()
$ filter-jsonl output/alexa.json 'this.headers.server === "Apache"'