Skip to content

Commit 4a99c04

Browse files
Boshra MahmoudiBoshra Mahmoudi
authored andcommitted
implement shell tools/ wc exercise
1 parent cdb03c8 commit 4a99c04

1 file changed

Lines changed: 78 additions & 0 deletions

File tree

  • implement-shell-tools/wc

‎implement-shell-tools/wc/wc.js‎

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import { readFile } from "node:fs/promises";
2+
import process from "node:process";
3+
4+
const argvs= process.argv.slice(2);
5+
let countLines = false;
6+
let countWords = false;
7+
let countBytes = false;
8+
let totalWords = 0;
9+
let totalLines = 0;
10+
let totalBytes = 0;
11+
const files = []
12+
13+
for (const arg of argvs) {
14+
if (arg === "-l") {
15+
countLines = true;
16+
} else if (arg === "-w") {
17+
countWords = true;
18+
} else if (arg === "-c") {
19+
countBytes = true;
20+
} else {
21+
files.push(arg);
22+
}
23+
}
24+
25+
for (const file of files) {
26+
try {
27+
const content = await readFile(file, "utf-8");
28+
const arrayOfLines = content.split("\n");
29+
const arrayOfWords = content.trim().split(/\s+/)
30+
const bytes = Buffer.byteLength(content, "utf-8");
31+
const lines = arrayOfLines.length -1;
32+
const words = arrayOfWords.length;
33+
totalLines += lines;
34+
totalBytes += bytes;
35+
totalWords +=words
36+
if (countLines && countWords) {
37+
process.stdout.write(` ${lines} ${words} ${file}\n`);
38+
39+
} else if (countLines) {
40+
process.stdout.write(` ${lines} ${file}\n`);
41+
42+
} else if (countWords){
43+
process.stdout.write(` ${words} ${file}\n`);
44+
45+
} else if (countBytes) {
46+
process.stdout.write(` ${bytes} ${file}\n`);
47+
48+
} else {
49+
process.stdout.write(` ${lines} ${words} ${bytes} ${file}\n`);
50+
}
51+
52+
} catch(err) {
53+
console.error(err.message);
54+
}
55+
}
56+
57+
if (files.length > 1 ) {
58+
if (countLines && countWords) {
59+
process.stdout.write(` ${totalLines} ${totalWords} total\n`);
60+
61+
} else if (countLines) {
62+
process.stdout.write(` ${totalLines} total\n`);
63+
64+
} else if (countWords){
65+
process.stdout.write(` ${totalWords} total\n`);
66+
67+
} else if (countBytes) {
68+
process.stdout.write(` ${totalBytes} total\n`);
69+
70+
} else {
71+
process.stdout.write(` ${totalLines} ${totalWords} ${totalBytes} total\n`);
72+
}
73+
}
74+
75+
76+
77+
78+

0 commit comments

Comments
 (0)