Add tac utility

This commit is contained in:
joachimschmidt557 2019-03-29 11:15:36 +01:00
parent 1b57bc6fa3
commit 33a314f900
3 changed files with 53 additions and 4 deletions

View file

@ -8,6 +8,6 @@ requires "nim >= 0.19.0"
requires "cligen >= 0.9.19"
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"

21
nl.nim
View file

@ -1,11 +1,26 @@
import cligen
import common
proc main(files:seq[string], lineIncrement=1) =
proc digits(num:int): int =
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
for file in files:
var lineNr = 0
for line in lines(file):
lineNr += lineIncrement
writeLine(stdout, $(lineNr) & line)
writeLine(stdout, formatNumber(lineNr, numberWidth) & numberSeparator & line)
dispatch(main, version=("version", nimbaseVersion))

34
tac.nim
View file

@ -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))