分割大型文字檔
24 Jun 2021最近伺服器遇到問題,需要爬 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);
});
其中檔名跟行號自己照需求改一改就好了。