首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用EOL/EOF字符从流中剪切

使用EOL/EOF字符从流中剪切
EN

Stack Overflow用户
提问于 2015-01-14 16:57:52
回答 2查看 538关注 0票数 0

我需要从流中剪切一些东西,但似乎在EOL或EOF出现之前,剪切的铁路超高无法处理最后一行。

我的bash命令:

代码语言:javascript
复制
tail -n 5 -F /data/apache/log/error/error-log | cut -d ' ' -f1-5

日志文件包含例如:

代码语言:javascript
复制
[Wed Jan 14 09:00:00 2015] [error] Error 1
[Wed Jan 14 09:10:00 2015] [error] Error 2
[Wed Jan 14 09:20:00 2015] [error] Error 3
[Wed Jan 14 09:30:00 2015] [error] Error 4
[Wed Jan 14 09:40:00 2015] [error] Error 5

但我的输出是:

代码语言:javascript
复制
[Wed Jan 14 09:00:00 2015]
[Wed Jan 14 09:10:00 2015]
[Wed Jan 14 09:20:00 2015]
[Wed Jan 14 09:30:00 2015]

如果所有需要的列(前五列)都已经流过了,有没有办法让cut process (和output)成为最后一个未完成的行?

我想要的输出应该包含stream中的最后一行:

代码语言:javascript
复制
[Wed Jan 14 09:00:00 2015]
[Wed Jan 14 09:10:00 2015]
[Wed Jan 14 09:20:00 2015]
[Wed Jan 14 09:30:00 2015]
[Wed Jan 14 09:40:00 2015]

//编辑remove-F没有用,直播需要用到每当apache向日志中添加新条目时,我都需要立即使用cut处理它。无需用户交互,无需再次运行脚本等。只是以实时处理流的方式,即'cut‘不等待EOL才处理(和输出)行。如果这是不可能的,很好,我试图找到解决办法,但请不要告诉我,当我需要直播流时不使用直播流!

EN

回答 2

Stack Overflow用户

发布于 2015-01-15 10:30:47

最后,经过一些测试,我发现问题不是tail而是cut。用awk替换cut可以解决这个问题:

代码语言:javascript
复制
tail -n 5 -F /data/apache/log/error/error-log | awk '{print $1, $2, $3, $4, $5}'
票数 2
EN

Stack Overflow用户

发布于 2015-01-14 17:22:02

是否真的有必要使用-F (跟随并重试)选项?

去掉它,它就能工作了。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27939010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档