Add tac utility
This commit is contained in:
parent
1b57bc6fa3
commit
33a314f900
3 changed files with 53 additions and 4 deletions
|
|
@ -8,6 +8,6 @@ requires "nim >= 0.19.0"
|
||||||
requires "cligen >= 0.9.19"
|
requires "cligen >= 0.9.19"
|
||||||
requires "stint >= 0.0.1"
|
requires "stint >= 0.0.1"
|
||||||
|
|
||||||
bin = @["add", "cat", "cp", "div", "echo", "factor", "false", "head", "mkdir", "mul", "nl", "pwd", "rm", "seq", "shuf", "sleep", "sub", "tee", "touch", "true", "yes"]
|
bin = @["add", "cat", "cp", "div", "echo", "factor", "false", "head", "mkdir", "mul", "nl", "pwd", "rm", "seq", "shuf", "sleep", "sub", "tac", "tee", "touch", "true", "yes"]
|
||||||
|
|
||||||
binDir = "bin"
|
binDir = "bin"
|
||||||
|
|
|
||||||
21
nl.nim
21
nl.nim
|
|
@ -1,11 +1,26 @@
|
||||||
import cligen
|
import cligen
|
||||||
import common
|
import common
|
||||||
|
|
||||||
proc main(files:seq[string], lineIncrement=1) =
|
proc digits(num:int): int =
|
||||||
for file in files:
|
result = 1
|
||||||
|
var x = num
|
||||||
|
while x div 10 >= 1:
|
||||||
|
inc result
|
||||||
|
x = x div 10
|
||||||
|
|
||||||
|
proc spaces(num:int): string =
|
||||||
|
for i in 1..num:
|
||||||
|
result &= " "
|
||||||
|
|
||||||
|
proc formatNumber(num:int, width:int): string =
|
||||||
|
result = if digits(num) > width: $num
|
||||||
|
else: spaces(width - digits(num)) & $num
|
||||||
|
|
||||||
|
proc main(files:seq[string], lineIncrement=1, numberSeparator="\t", numberWidth=6) =
|
||||||
var lineNr = 0
|
var lineNr = 0
|
||||||
|
for file in files:
|
||||||
for line in lines(file):
|
for line in lines(file):
|
||||||
lineNr += lineIncrement
|
lineNr += lineIncrement
|
||||||
writeLine(stdout, $(lineNr) & line)
|
writeLine(stdout, formatNumber(lineNr, numberWidth) & numberSeparator & line)
|
||||||
|
|
||||||
dispatch(main, version=("version", nimbaseVersion))
|
dispatch(main, version=("version", nimbaseVersion))
|
||||||
|
|
|
||||||
34
tac.nim
34
tac.nim
|
|
@ -0,0 +1,34 @@
|
||||||
|
import cligen, os, streams
|
||||||
|
import common
|
||||||
|
|
||||||
|
proc catFile(file:string) =
|
||||||
|
if not existsFile(file):
|
||||||
|
err "tac: " & file & ": No such file or directory"
|
||||||
|
system.quit 1
|
||||||
|
var
|
||||||
|
f = open(file, fmRead)
|
||||||
|
reverseLines: seq[string]
|
||||||
|
for line in lines(f):
|
||||||
|
reverseLines = line & reverseLines
|
||||||
|
for line in reverseLines:
|
||||||
|
writeLine(stdout, line)
|
||||||
|
|
||||||
|
proc catStdin() =
|
||||||
|
var
|
||||||
|
line = ""
|
||||||
|
reverseLines: seq[string]
|
||||||
|
while stdin.readLine(line):
|
||||||
|
reverseLines = line & reverseLines
|
||||||
|
for line in reverseLines:
|
||||||
|
writeLine(stdout, line)
|
||||||
|
|
||||||
|
proc main(files:seq[string]) =
|
||||||
|
if files.len == 0:
|
||||||
|
catStdin()
|
||||||
|
for file in files:
|
||||||
|
if file == "-":
|
||||||
|
catStdin()
|
||||||
|
else:
|
||||||
|
catFile(file)
|
||||||
|
|
||||||
|
dispatch(main, version=("version", nimbaseVersion))
|
||||||
Loading…
Add table
Add a link
Reference in a new issue