分割大型文字檔


最近伺服器遇到問題,需要爬 Log,但 Log 檔如果一開始沒有做好 logrotate 的話,動輒都是數十萬行的,事後閱讀起來有點痛苦,所以想說有沒有辦法可以指定個行號之後把檔案切開。

作法

既然目標是指定行數之後切割檔案,那要做的事情應該就是將檔案逐行讀入,並設定好終止條件應該就沒有問題了。

以下使用 Node.js 實現,不需要額外的套件庫。

const fs = require('fs');
const readline = require('readline');

// 指定檔案
let inputStream = fs.createReadStream('FILE_NAME.log');
let reader = readline.createInterface({ input: inputStream });

// 指定中止行號
const BREAK_LINE = 10000;
let pointer = 0;
reader.on('line', (line) => {
  pointer++;
  if (pointer < BREAK_LINE) {
    // 存放新檔案的位置
    fs.appendFileSync('NEW_FILE_NAME.log', line + '\n');
  } else {
    reader.close();
  }
});
reader.on('close', () => {
  console.log('break');
  process.exit(0);
});

其中檔名跟行號自己照需求改一改就好了。

Hi 喜歡這篇文章的話 或許可以請我喝杯咖啡
Buy me a coffeeBuy me a coffee