• 使用Ruby简单实现的tail命令,支持动态输出


    最主要的是使用seek这个命令,从文件的末尾开始读字符。读到一个换行符 \n 之后,计数器加一,直到找到符合要求的行数后,读内容到文件末尾输出。支持 –f 部分的想法是,在文件最后的位置不断地循环读,发现新内容后就进行输出。

    脚本存在的问题:不支持多个文件,tail命令本身是可以支持的;不断循环的效率太低,应该有更好的办法可以优化。


     1 #!/usr/bin/ruby
     2 
     3 line = ARGV[0]
     4 filename = ARGV[1]
     5 
     6 unless line && filename then
     7     print "Invalid parameter.\n"
     8     print "Usage:ruby tail.rb line filename\n"
     9 end
    10 line = line.to_i
    11 
    12 begin
    13     io = open(filename)
    14     n = 0
    15     lc = 0
    16     stack = Array.new
    17 
    18     while lc < line + 1 do
    19         n = n + 1
    20         io.seek( -n, IO::SEEK_END )
    21         if io.pos == 0 then
    22             break
    23         end
    24         #break unless io.seek( -n ,IO::SEEK_END)
    25         s = io.read( 1 )
    26         if /\n/ =~ s then
    27             lc = lc + 1
    28         end
    29     end
    30 
    31     io.seek(-n, IO::SEEK_END)
    32     s = io.read()
    33     last = io.pos
    34     print s
    35 
    36     while item = io.read() do
    37         if ! item.empty? then
    38             print item
    39             last = io.pos
    40         else
    41             io.pos = last
    42         end
    43     end
    44 rescue
    45     print $@, "\n"
    46 end
  • 相关阅读:
    [HNOI2003]消防局的设立
    [HNOI2003]操作系统(优先队列,堆排序)
    车站分级 (2013noip普及组T4)(树形DP)
    中国剩余定理
    楼房重建(分块优化)
    [HAOI2010]软件安装(树形背包,tarjan缩点)
    [USACO08NOV]时间管理Time Management(排序,贪心)
    没有上司的舞会(树形DP)
    选课(树形DP)
    miller rabin 素性测试
  • 原文地址:https://www.cnblogs.com/cocowool/p/2482205.html
Copyright © 2020-2023  润新知