在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
最主要的是使用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
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论