Skip to content

Commit d1ed6ca

Browse files
Add support for multiple files in cat command
1 parent 6607cde commit d1ed6ca

1 file changed

Lines changed: 30 additions & 29 deletions

File tree

  • implement-shell-tools/cat

implement-shell-tools/cat/cat.py

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -9,41 +9,42 @@
99

1010
parser.add_argument("-n", "--number", action="store_true", help="Number all output lines")
1111
parser.add_argument("-b", "--number-nonblank", action="store_true", help="Number non-empty lines only")
12-
parser.add_argument("path", help="File to read")
12+
parser.add_argument("paths", nargs='+', help="Files to read")
1313

1414
args = parser.parse_args()
1515

16-
# Read the file
17-
with open(args.path, "r") as f:
18-
content = f.read()
19-
16+
line_number = 0 # Shared counter across all files
2017

21-
# Check if numbering is needed
22-
if args.number:
23-
lines = content.split("\n")
24-
numbered_lines = []
18+
# Process each file
19+
for path in args.paths: # LEVEL 1: for loop starts
20+
with open(path, "r") as f: # LEVEL 2: inside for loop
21+
content = f.read() # LEVEL 3: inside with block
2522

26-
for index, line in enumerate(lines):
27-
line_number = index + 1
28-
numbered_line = f"{line_number:6}\t{line}" # Format with tab like real cat
29-
numbered_lines.append(numbered_line)
30-
31-
print("\n".join(numbered_lines))
32-
33-
elif args.number_nonblank:
34-
lines = content.split("\n")
35-
numbered_lines = []
36-
line_number = 0
37-
38-
for line in lines:
39-
if line.strip() == "": # Empty line
40-
numbered_lines.append(line) # Don't number it
41-
else: # Non-empty line
42-
line_number = line_number + 1
23+
# Check if numbering is needed
24+
if args.number: # LEVEL 2: inside for loop
25+
lines = content.split("\n") # LEVEL 3: inside if
26+
numbered_lines = []
27+
28+
for index, line in enumerate(lines): # LEVEL 3: inside if
29+
line_number = line_number + 1 # LEVEL 4: inside inner for
4330
numbered_line = f"{line_number:6}\t{line}"
4431
numbered_lines.append(numbered_line)
32+
33+
print("\n".join(numbered_lines)) # LEVEL 3: inside if
4534

46-
print("\n".join(numbered_lines))
35+
elif args.number_nonblank: # LEVEL 2: inside for loop
36+
lines = content.split("\n") # LEVEL 3: inside elif
37+
numbered_lines = []
38+
39+
for line in lines: # LEVEL 3: inside elif
40+
if line.strip() == "": # LEVEL 4: inside inner for
41+
numbered_lines.append(line)
42+
else:
43+
line_number = line_number + 1
44+
numbered_line = f"{line_number:6}\t{line}"
45+
numbered_lines.append(numbered_line)
46+
47+
print("\n".join(numbered_lines))
4748

48-
else:
49-
print(content)
49+
else: # LEVEL 2: inside for loop
50+
print(content) # LEVEL 3: inside else

0 commit comments

Comments
 (0)