LINUX.ORG.RU

История изменений

Исправление 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"'