我有一个我要解析的日志文件
我只需要前两个字段(用空格分隔)
日志文件中的示例行:
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中有一个可以让我解析的选项
提前致谢
答案 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'