Skip to content

About

Parse text columns, like the output of unix commands

Resources

Code of conduct

Contributing

Stars

84 stars

Watchers

7 watching

Forks

Repository files navigation

parse-columns

Parse text columns, like the output of Unix commands

Install

npm install parse-columns

Usage

$ df -kP
Filesystem 1024-blocks      Used Available Capacity  Mounted on
/dev/disk1   487350400 467871060  19223340    97%    /
devfs              185       185         0   100%    /dev
map -hosts           0         0         0   100%    /net
import {promisify} from 'node:util';
import childProcess from 'node:child_process';
import parseColumns from 'parse-columns';

const execFileP = promisify(childProcess.execFile);

const {stdout} = await execFileP('df', ['-kP']);

console.log(parseColumns(stdout, {
	transform: (item, header, columnIndex) => {
		// Coerce elements in column index 1 to 3 to a number
		if (columnIndex >= 1 && columnIndex <= 3) {
			return Number(item);
		}

		return item;
	}
}));
/*
[
	{
		Filesystem: '/dev/disk1',
		'1024-blocks': 487350400,
		Used: 467528020,
		Available: 19566380,
		Capacity: '96%',
		'Mounted on': '/'
	},
	…
]
*/

API

parseColumns(textColumns, options?)

textColumns

Type: string

The text columns to parse.

options

Type: object

separator

Type: string | RegExp Default: ' '

Separator to split columns on.

  • string: Single character separator (default behavior)
  • RegExp: Regular expression pattern for flexible matching
// Default space separator
parseColumns(data);

// Tab separator  
parseColumns(data, {separator: '\t'});

// Any whitespace (spaces, tabs, etc.)
parseColumns(data, {separator: /\s+/});

// Either spaces or tabs  
parseColumns(data, {separator: /[ \t]/});
headers

Type: string[]

Headers to use instead of the existing ones.

transform

Type: Function

Transform elements.

Useful for being able to cleanup or change the type of elements.

The supplied function gets the following arguments and is expected to return the element:

  • element (string)
  • header (string)
  • columnIndex (number)
  • rowIndex (number)

Limitations

Fixed-width parsing needs every row to line up with the header's column boundaries.

A cell that is wider than its column cannot be detected. It has the same shape as two merged columns, or as a value that contains the separator, which this module supports on purpose. When it happens, the columns merge and the resulting keys are wrong. The module does not throw and does not warn.

Pass headers when you can. A row that produces an empty field is then a clear sign of the problem. Better still, make the command pad its own output (ps without truncation, df -P), or run it through column -t first.

Related

About

Parse text columns, like the output of unix commands

Resources

Code of conduct

Contributing

Stars

84 stars

Watchers

7 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages