首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >grep或C代码来解析日志文件?

问grep或C代码来解析日志文件?
EN

Stack Overflow用户
提问于 2013-03-23 18:48:32
回答 4查看 931关注 0票数 1

我有一个要解析的日志文件

我只需要前两个字段(用空格分隔)

日志文件中的采样行:

代码语言:javascript
复制
1362960460.697 19 27.197.12.76 TCP_MISS/404 339 GET http://what-ever-server.com/what-ever-file - DIRECT/22.22.22.22 text/html

第一个字段应该不带".“后面的数字。

我想我可以用C语言来做这件事,但是有一个指针来跟踪每个字符来检查它是空格还是“,这就太复杂了。所以我在这里的一些文章中看到grep可以完成这项工作,但是我的文件中的字段没有固定的长度

我应该用C语言做吗?还是在grep中有一个选项可以让我解析

提前感谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-23 18:55:15

这就是awk的用途。

代码语言:javascript
复制
cat logfile | awk '{print $1 " " $2}' | sed 's_\.[0-9]*__g'

使用awk打印每行的第一个和第二个字段。然后匹配小数位并使用sed删除它们。

票数 4
EN

Stack Overflow用户

发布于 2013-03-23 18:58:16

要获取文件的前两个字段,请使用awk (包含在所有unix或linux发行版中)

代码语言:javascript
复制
awk '{split($1,a,"."); print a[1], $2}' logfile

解释:

  • split函数根据分隔符将第一个标记($1)拆分为数组a .
  • print a[1], $2根据输出字段分隔符(缺省情况下为空格

)打印这两个值

更简单的方法(假设第一个字段是一个数字)是使用int函数:

代码语言:javascript
复制
 awk '{print int($1), $2}' logfile
票数 4
EN

Stack Overflow用户

发布于 2013-03-23 21:20:34

代码语言:javascript
复制
$ cat file
1362960460.697 19 27.197.12.76 TCP_MISS/404 339 GET http://what-ever-server.com/what-ever-file - DIR
ECT/22.22.22.22 text/html

$ awk -F'[ .]' '{print $1,$3}' file
1362960460 19

$ sed 's/\([^.]\)\.[^ ]* \([^ ]*\).*/\1 \2/' file
1362960460 19
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15585842

复制
相关文章

相似问题

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