用于解析日志文件的grep或C代码?

时间:2013-03-23 10:48:32

标签: c parsing awk grep

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

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

日志文件中的示例行:

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做到这一点但是它会变得如此复杂,有一个指针可以追踪每一个角色,以检查它是否有空间或者#34;和#34;" 所以我在这里的一些帖子中看到grep可以完成这项工作 但我文件中的字段没有固定的长度

我应该用C做吗?或者grep中有一个可以让我解析的选项

提前致谢

4 个答案:

答案 0 :(得分:4)

这就是awk的用途。

cat logfile | awk '{print $1 " " $2}' | sed 's_\.[0-9]*__g'

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

答案 1 :(得分:4)

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

awk '{split($1,a,"."); print a[1], $2}' logfile

说明:

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

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

 awk '{print int($1), $2}' logfile

答案 2 :(得分:4)

$ 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

答案 3 :(得分:0)

BSD版本(即OSX)

cat logfile | awk '{print $1, $2}' | sed -e 's;\.*;;g'