Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
Binary file added implement-shell-tools/.DS_Store
Binary file not shown.
50 changes: 50 additions & 0 deletions implement-shell-tools/cat/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import { readFileSync } from "node:fs";

function cleanInput(listOfFiles) {
let cleanLinesArr = [];

for (const file of listOfFiles) {
const grabbedText = readFileSync(file, "utf-8");
const splitLines = grabbedText.split("\n");
cleanLinesArr.push(...splitLines);
}
return cleanLinesArr;
}

const args = process.argv.slice(2);
let flag;
let restIsFiles;

if (args[0] && args[0][0] === "-") {
flag = args[0];
restIsFiles = args.slice(1);
} else {
flag = null;
restIsFiles = args;
}

function takeSpecifiedAction(cleanLinesArr, flag) {
let countingOnlyFullLines = 1;

for (const file of cleanLinesArr) {
// Task: We recommend you start off supporting no flags, then add support for `-n`, then add support for `-b`.
if (!flag) {
console.log(file);
} else if (flag === "-n") {
console.log(`${countingOnlyFullLines} ${file}`);
countingOnlyFullLines += 1;
} else if (flag === "-b") {
if (file === "") {
console.log("");
} else {
console.log(`${countingOnlyFullLines} ${file}`);
countingOnlyFullLines += 1;
}
} else {
console.log("incorrect flag");
}
}
}

const lines = cleanInput(restIsFiles);
takeSpecifiedAction(lines, flag);
41 changes: 41 additions & 0 deletions implement-shell-tools/ls/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import process from "node:process";
import { promises as fs } from "node:fs";

// `ls -1`
async function showAllFilesInDir(directory) {
const listOfFiles = await fs.readdir(directory);

for (const eachFile of listOfFiles) {
if (eachFile[0] !== ".") console.log(eachFile);
}
}

// `ls -1 sample-files`
async function showVisibleInSampleFiles() {
const listOfFiles = await fs.readdir("sample-files");

for (const eachFile of listOfFiles) {
if (eachFile[0] !== ".") {
console.log(eachFile);
}
}
}

// `ls -1 -a sample-files`
async function showAllInSampleFiles() {
const listOfFiles = await fs.readdir("sample-files");

for (const eachFile of listOfFiles) {
console.log(eachFile);
}
}

const argv = process.argv.slice(2);

if (argv.includes("-a")) {
await showAllInSampleFiles();
} else if (argv.includes("sample-files")) {
await showVisibleInSampleFiles();
} else {
await showAllFilesInDir(".");
}
74 changes: 74 additions & 0 deletions implement-shell-tools/wc/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import process from "node:process";
import { promises as fs } from "node:fs";

//from coursework
// const content = await fs.readFile(path, "utf-8");
// const countOfWordsContainingEs = content
// .split(" ")
// .filter((word) => word.includes("e"))
// .length;
// console.log(countOfWordsContainingEs);

function calculateCounts(inputFiles) {
return {
lines: inputFiles.split("\n").length - 1,
words: inputFiles.split(/\s+/).filter((w) => w !== "").length,
bytes: inputFiles.length,
};
}

// * `wc -l sample-files/3.txt`
// * `wc -l sample-files/*`
async function countLines(listOfFiles) {
for (const file of listOfFiles) {
const content = await fs.readFile(file, "utf-8");

// const linesNumbered = content.split('\n').length-1
const counts = calculateCounts(content);
console.log(`${counts.lines} ${file}`);
}
}

// * `wc -w sample-files/3.txt`
async function countWords(listOfFiles) {
for (const file of listOfFiles) {
const content = await fs.readFile(file, "utf-8");

// const wordsCounted = content.split(" ").filter(word => word !== "").length;
// console.log(`${wordsCounted} ${file}`);
const counts = calculateCounts(content);
console.log(`${counts.words} ${file}`);
}
}

// * `wc -c sample-files/3.txt`
async function countBytes(listOfFiles) {
for (const file of listOfFiles) {
const content = await fs.readFile(file, "utf-8");
// const bytesCounted = content.length;
const counts = calculateCounts(content);
console.log(`${counts.bytes} ${file}`);
}
}

// * `wc sample-files/*`
async function countAll(listOfFiles) {
for (const file of listOfFiles) {
const content = await fs.readFile(file, "utf-8");
const counts = calculateCounts(content);
console.log(`${counts.lines} ${counts.words} ${counts.bytes} ${file}`);
}
}

const argv = process.argv.slice(2);
const files = argv.filter((arg) => !arg.startsWith("-"));

if (argv.includes("-l")) {
await countLines(files);
} else if (argv.includes("-w")) {
await countWords(files);
} else if (argv.includes("-c")) {
await countBytes(files);
} else {
await countAll(files);
}
Loading