首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在node js中同步读取文本文件并将行组合在一起

如何在node js中同步读取文本文件并将行组合在一起
EN

Stack Overflow用户
提问于 2018-07-02 00:09:10
回答 1查看 467关注 0票数 0

我需要同步读取node js中的snort日志文件,并将其解析为JSON数据,以便将其存储在数据库中。问题是,snort日志文件不仅仅是一行程序。snort中的一个警报由5行组成,我希望能够将这5行作为一个警报存储在数据库中。

我试过使用

代码语言:javascript
复制
     const rl = readline.createInterface({
            input: fs.createReadStream(LOG_FILE),
         });

         rl.on('line', (line) => {
         console.log(`Line from file: ${line}`);
         });

逐行读取文件并打印出来,但它只逐行打印出来,我不知道如何将它们组合在一起。

以下是snort日志文件的示例:

代码语言:javascript
复制
[**] [1:1000001:1] ICMP test [**]
[Classification: Generic ICMP event] [Priority: 3] 
06/09-14:18:58.102020 192.168.137.91 -> 192.168.137.89
ICMP TTL:64 TOS:0x0 ID:20610 IpLen:20 DgmLen:84 DF
Type:8  Code:0  ID:1664   Seq:5  ECHO

所以在我的数据库中,我将有一个名为alert的东西,这5行将是带有id: 1的alert,依此类推。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-02 00:38:31

收集变量中的行,然后在获得完整条目后执行某些操作。如下所示:

代码语言:javascript
复制
let lines = [];
rl.on('line', (line) => {
  lines.push(line);
  if (lines.length>=5) {
    let log = lines.splice(0,5).join('\n');
    console.log(log);
  }
});

这是以5行为一组的计数。如果您愿意,您还可以使用其他条件,如模式匹配或其他。

注意:如果你在条目的第一行使用模式匹配,你将不得不做一些事情来检查文件中的最后一个(后面不会有另一个),比如监听流的end事件,并从那里编写最后一个logPart。(但由于此示例只等待第5行,因此我们不需要做任何特殊操作来处理最后一组。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51124926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档