-
-
Notifications
You must be signed in to change notification settings - Fork 104
Expand file tree
/
Copy pathwc.js
More file actions
103 lines (79 loc) · 1.76 KB
/
Copy pathwc.js
File metadata and controls
103 lines (79 loc) · 1.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
const fs = require("fs");
// Get arguments after "node wc.js"
const args = process.argv.slice(2);
let countLines = false;
let countWords = false;
let countBytes = false;
let files = [];
// Read arguments
for (let arg of args) {
if (arg === "-l") {
countLines = true;
} else if (arg === "-w") {
countWords = true;
} else if (arg === "-c") {
countBytes = true;
} else {
files.push(arg);
}
}
// If no flags are given, wc shows all three
if (!countLines && !countWords && !countBytes) {
countLines = true;
countWords = true;
countBytes = true;
}
// Totals
let totalLines = 0;
let totalWords = 0;
let totalBytes = 0;
let filesCounted = 0;
// Function to count one file
function countFile(fileName) {
try {
const content = fs.readFileSync(fileName, "utf8");
let lines = content.split("\n").length - 1;
let words = content
.trim()
.split(/\s+/)
.filter((word) => word.length > 0).length;
let bytes = Buffer.byteLength(content);
totalLines += lines;
totalWords += words;
totalBytes += bytes;
filesCounted++;
let result = "";
if (countLines) {
result += lines + " ";
}
if (countWords) {
result += words + " ";
}
if (countBytes) {
result += bytes + " ";
}
result += fileName;
console.log(result);
} catch (error) {
console.log("Cannot read file: " + fileName);
}
}
// Run wc for every file
for (let file of files) {
countFile(file);
}
// Print totals if more than one file was counted
if (filesCounted > 1) {
let result = "";
if (countLines) {
result += totalLines + " ";
}
if (countWords) {
result += totalWords + " ";
}
if (countBytes) {
result += totalBytes + " ";
}
result += "total";
console.log(result);
}