Got bored, pretty sure this is what you're asking for. If there are any issues its easy to fix, and are a result of the somewhat vague reqs.
Code
#!/usr/bin/env node
// USAGE
// document merge mode:
// node . -m 1 -s "/path/to/my/data/dir" -o "/path/to/my/out/dir"
// document truthy split mode:
// node . -m 2 -s "/path/to/my/data/document.txt" -o "/path/to/my/out/dir"
const yargs = require("yargs");
const fs = require("fs");
const options = yargs
.usage("Usage: -m <mode> -s <source> -o <output_dir>")
.option("m", {
alias: "mode",
describe: "Execution mode. 1 for doc merge, 2 for truthy split.",
type: "string",
demandOption: true
})
.option("s", {
alias: "source",
describe: "Source Directory or file",
type: "string",
demandOption: true
})
.option("o", {
alias: "outDir",
describe: "Output Directory",
type: "string",
demandOption: true
}).argv;
if (options.mode === "1") {
console.log("Reading from directory: " + options.source);
console.log("Starting Document Merge");
const files = fs.readdirSync(options.source);
let outputContents = "";
files.forEach(file => {
console.log("Merging document: " + file);
const content = fs.readFileSync(options.source + "/" + file, "utf8");
outputContents = outputContents.concat(content);
});
console.log(
"Writing output document: " + options.outDir + "/mode_1_result.txt"
);
fs.writeFileSync(options.outDir + "/mode_1_result.txt", outputContents);
console.log("Output written. Done.");
} else if (options.mode === "2") {
console.log("Reading from file: " + options.source);
console.log("Starting Truthy Split");
const lineReader = require("readline").createInterface({
input: require("fs").createReadStream(options.source)
});
console.log("Reading lines...");
let count = 0;
lineReader.on("line", function(line) {
if (line && line !== "") {
console.log(
"Writing output document: " +
options.outDir +
"/mode_2_" +
count +
"_result.txt"
);
fs.writeFileSync(
options.outDir + "/mode_2_" + count + "_result.txt",
line
);
count++;
console.log("Output written.");
}
});
} else {
console.error("Invalid Mode.");
}