Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用Ruby简单实现的tail命令,支持动态输出

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

作者头像
大江小浪
发布于 2018-07-25 01:59:15
发布于 2018-07-25 01:59:15
80300
代码可运行
举报
文章被收录于专栏:小狼的世界小狼的世界
运行总次数:0
代码可运行

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-05-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Linux系统调用API】二、read函数、write函数、lseek函数
可以通过read()和write()函数来实现向一个文件中写入内容并把写入内容打印到屏幕的功能。
mindtechnist
2024/08/08
3520
【Linux系统调用API】二、read函数、write函数、lseek函数
[apue] 标准 I/O 库那些事儿
标准 IO 库自 1975 年诞生以来,至今接近 50 年了,令人惊讶的是,这期间只对它做了非常小的修改。除了耳熟能详的 printf/scanf,回过头来对它做个全方位的审视,看看到底优秀在哪里。
海海
2022/10/05
1.6K0
Lua 语法基础 | Nmap 脚本
and break do else elseif end false goto for function if in local nil not or repeat return then true until while
意大利的猫
2020/08/20
2.1K0
经典!Python运维中常用的几十个Python运维脚本
file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建。但是更推荐使用内置函数open()来打开一个文件。
小小科
2018/11/06
1.6K0
Ruby学习笔记
Ruby语言中,以对象为基本单位,可以说所有的元素都是对象。按照之前对于面向对象程序的理解,对象是指包含了特定属性和方法集合的一组程序。对象由类来定义,具体的表现为对象实例。也就是说,对象是类的实例化[2]。
大江小浪
2018/07/25
2K0
Ruby学习笔记
go 源码学习之---Tail 源码分析
已经有两个月没有写博客了,也有好几个月没有看go相关的内容了,由于工作原因最近在做java以及大数据相关的内容,导致最近工作较忙,博客停止了更新,正好想捡起之前go的东西,所以找了一个源码学习
coders
2018/09/27
1.1K0
pkg文件--一种简单的游戏资源打包格式
[四字节] 固定的内容, 值不重要  [四字节] 文件数目(unsigned int)  [四字节] 文件名表 的偏移(unsigned int)  [四字节] 文件名表 的长度(字节数)(unsigned int)  ……  中间一堆 各个文件的内容, 文件内容使用zlib压缩过  ……  直到  文件名表:  [两字节] 文件名长度  [文件名长度那么多字节] 文件名  [四字节] 固定的内容,值不重要  [四字节] 文件原长度  [四字节] 文件偏移  [四字节] 文件压缩后的长度  [两字节] 又一个文件名的长度  …
用户7886150
2020/11/23
2.2K0
经典!Python运维中常用的几十个Python运维脚本
本文由马哥教育Python自动化实战班4期学员推荐,转载自互联网,作者为mark,内容略经小编改编和加工,观点跟作者无关,最后感谢作者的辛苦贡献与付出。 file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建。但是更推荐使用内置函数open()来打开一个文件。 ---- 首先open是内置函数,使用方式是open('file_name', mode, buffering),返回值也是一个file对象,同样,以写模式打开
小小科
2018/05/02
4.8K0
经典!Python运维中常用的几十个Python运维脚本
NDK启航篇——C语言终章(文件IO操作)
今天写最后的部分文件IO操作 什么是文件IO 就是对存储在计算机物理上的二进制文件进行读写操作 文件在逻辑上分为文本文件和二进制之分 C读写文本文件与二进制文件的差别仅仅体现在回车换行符 写文本时,每遇到一个\n,会将其转换成\r\n(回车换行) 读文本时,每遇到一个\r\n,会将其转换成\n 读写文本文件 关键函数 fopen(文件路径,"r") r代表读取 fget(缓冲区,每次读取多少,文件地址) fputs(写入的字符,文件地址) fclose(文件地址) //读取文本文件 voi
longzeqiu
2020/04/09
9020
一天一个 Linux 命令(13):tail 命令
本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/131
joshua317
2021/09/26
2650
5.1 C/C++ 使用文件与指针
C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。
王瑞MVP
2023/10/10
2490
5.1 C/C++ 使用文件与指针
python常用运维脚本实例
file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建。但是更推荐使用内置函数open()来打开一个文件 .
菲宇
2019/06/12
1.8K0
【C 语言】文件操作 ( 配置文件读写 | 完整代码示例 ) ★
文章目录 一、头文件 cfg.h 二、核心业务 cfg.c 三、主函数 四、执行结果 一、头文件 cfg.h ---- // 防止多次导入 #ifndef __CFG_H__ #define __CFG_H__ // 兼容 C++ #ifdef __cplusplus extern "C" { #endif // __cplusplus // 定义接口时 , 如果函数形参用作输入数据时 , 可以在形参名很后面添加 /*in*/ 注释 // // 获取配置项 int read_config_file(
韩曙亮
2023/03/30
9350
【C 语言】文件操作 ( 配置文件读写 | 完整代码示例 ) ★
Python学习—文件操作
1.文件是存储在外部介质上的数据的集合,文件的基本单位是字节,文件所含的字节数就是文件的长度。每个字节都有一个默认的位置,位置从0开始,文件头的位置就是0,文件尾的位置是文件内容结束后的后一个位置,该位置上没有文件内容,为空。文件的读写操作从文件指针所在的位置开始,即读会从文件指针所在的位置开始读取,写会从文件指针所在的位置开始写,如有内容,则会被覆盖。 2.按文件中数据的组织形式把文件分为文本文件和二进制文件两类。文本文件存储的是常规字符串,由文本行组成,通常以换行符'\n'结尾,只能读写常规字符串。文本文件可以用字处理软件如gedit、记事本等进行查看编辑。常规字符串是指文本编辑器能正常显示、编辑的字符串,如英文字母串、汉字串、数字串。二进制文件把对象在内存中的内容以字节串(bytes)的形式进行存储。不能用字处理软件进行编辑。
py3study
2020/01/08
5590
PHP基于闭包思想实现的BT(torrent)文件解析工具实例详解
本文实例讲述了PHP基于闭包思想实现的torrent文件解析工具。分享给大家供大家参考,具体如下: PHP对静态词法域的支持有点奇怪,内部匿名函数必须在参数列表后面加上use关键字,显式的说明想要使用哪些外层函数的局部变量。
用户2323866
2021/07/02
8650
要点4:C的文件操作
c中的文件打开模式分为:文本模式和二进制模式,分别处理文本格式文件和二进制格式文件。
CN_Simo
2020/08/25
8370
要点4:C的文件操作
[PYTHON] 核心编程笔记之九-Py
内建函数open()[以及file()]提供了初始化输入/输出(I/0)操作的通用接口,open()内建函数成功打开文件后会返回一个文件对象,否则引发一个错误,当操作失败,Python会产生一个IOError异常
py3study
2020/01/07
6130
Linux系统调用四、lseek()函数详解「建议收藏」
我们可以通过上一节所讲的read()和write()函数来实现向一个文件中写入内容并把写入内容打印到屏幕的功能。
全栈程序员站长
2022/07/04
1.5K0
Linux系统调用四、lseek()函数详解「建议收藏」
python实现tail -f命令功能
#!/usr/bin/env python #!encoding:utf-8 ''' Python-Tail - Unix tail follow implementation in Python. python-tail can be used to monitor changes to a file. Example: import tail # Create a tail instance t = tail.Tail('file-to-be-followed')
py3study
2020/01/06
1.4K0
某大厂面试题:如何只用python的内置函数处理10G的大文件并使使用内存最小
现在有一张很大的数据表(格式.csv)。内容量很多,记录着往年所有的历年时间和温度,并且升序存储。
make a bug
2022/09/20
7760
推荐阅读
相关推荐
【Linux系统调用API】二、read函数、write函数、lseek函数
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验