⚡ Fastest and memory-efficient async file line counter with customizable buffer size and separator.
Allow you to count the lines of a huge file by reading chunk by chunk without buffering the whole file in memory. Has the ability to customize a line separator (multiple characters allowed), and skip blank lines.
- Fast & memory-efficient.
- Well-tested with Jest.
- Written in TypeScript.
- CLI supported.
# using npm
npm install linecounter2
# using yarn
yarn add linecounter2
// in ESM
import { LineCounter } from 'linecounter2';
// in CommonJS
const { LineCounter } = require('linecounter2');
const total = await LineCounter.count({ filePath: './file.txt' });
console.log(total);
It returns the total lines in the file. The options you can pass are:
Name | Type | Default | Description |
---|---|---|---|
filePath | string |
none | The path or location of your file (required) |
bufferSize | number |
65536 |
Chunk/buffer size in bytes. Default: 64 KB |
lineSeparator | string |
none | Separator to separate between lines (multiple characters allowed). Will be automatically determined between '\r\n' , '\n' , or '\r' |
skipBlank | boolean |
false |
Used to skip blank lines (including whitespace lines) |
skipEndingLineBreak | boolean |
false |
Used to skip the last blank line (if any) of the file. See the example below |
Example:
const filePath = './file.txt';
const total1 = await LineCounter.count({ filePath });
console.log('total lines =', total1);
const total2 = await LineCounter.count({ filePath, skipBlank: true });
console.log('total lines [skip blank] =', total2);
const total3 = await LineCounter.count({ filePath, skipEndingLineBreak: true });
console.log('total lines [skip ending line break] =', total3);
./file.txt
1111
2222
3333
5555
6666
7777
8888
9999
NOTE: there is a blank line at the end of the above file (after the 9999
line) which may not be visible.
Output:
total lines = 10
total lines [skip blank] = 8
total lines [skip ending line break] = 9
This library supports CLI in an easy way.
Example:
# using npm
npx linecounter2 ./file.txt
# using yarn
yarn linecounter2 ./file.txt
./file.txt
1111
2222
3333
5555
Output:
5
You can pass additional options as arguments as follows:
# using npm
npx linecounter2 ./file.txt --skipBlank --bufferSize=1024 --lineSeparator=\\n
# using yarn
yarn linecounter2 ./file.txt --skipBlank --bufferSize=1024 --lineSeparator=\\n
Output:
4
This library is well tested. You can test the code as follows:
# using npm
npm test
# using yarn
yarn test
- chunkreader2 - Asynchronous, buffered, chunk-by-chunk file reader with customizable buffer size.
- linereader2 - Asynchronous, buffered, line-by-line file reader with customizable buffer size and separator. (This library uses this package internally)
If you have anything to contribute, or functionality that you lack - you are more than welcome to participate in this!
Feel free to use this library under the conditions of the MIT license.