读书人

awk等下令处理文本日志[数据]工作记录

发布时间: 2012-07-15 20:11:35 作者: rapoo

awk等命令处理文本日志[数据]工作记录两则
刚才为了选全站分类,寻找了小分钟。想来静心写写工作笔记,发篇blog还是挺麻烦,尤其对我这个懒人。为了子文为了坚持,忍耐下吧。
下面的文字,是小申工作的笔记。处理文本log的两次记录,备忘以后方便查询。这块我是刚入门的同学,应用也比较简单,高手看到之后,多多指教。

1、处理一:
~$:awk -F' \\[' '{printf( int($2)"\n")}' log_1.txt>ret_1.txtor:~$:awk -F'[' '{printf( int($3)"\n")}' log_1.txt>ret_1.txt
解释:命令一使用' '空格加'['做分隔符号,在'['前加上两个'\\'转一下。
命令二直接使用'[',所以打印的时候,打印的是 $3,
b、单独提取用户携带的参数,用'use:'做参数就可以了。
c、同时提取,多次使用awk,如:

~$:awk -F'\\]\\[visit:get.php\\]\\[use:' '{printf($1" "int($2)"\n")}' log_1.txt|awk -F' \\[' '{printf($2"\n")}'|head

总结三点:
a、awk的 -F 参数,一些特殊符号,用两个'\\'转。
b、处理部分,'{printf($1" "int($2)"\n")}',外面单引号,里面双引号。系统变量用单引号括起来,双引号被解释成是字符串。(不一定正确,但不会报错,哈哈),里面的内置函数 int()等,更多函数可以google awk 内置函数。
c、对于printf(),其实括号也可以不要的。里面的格式,用字符串拼凑:($1" "int($2)"\n"),也可以用c那种("%d\n",$2)。看怎么样方便。
2、处理二:
~$:sed '/^$/d' file or_~$:awk '/./ {print}' file or_~$:grep -v '^$' file
c、对于 log_2.txt和log_3.txt 因为用户可以多次参与活动,我们要做的是排序去重。
~$:sort -d file|uniq>file_ret

d、现在文件,排好续了,用jion可以把两个文件重合的部分得出来。但如何比较时间呢。之前我的想法是把文件中时间按部分转化为时间戳。但尝试了下,有点麻烦,没有现成的函数。倒是awk中,在printf的时候,用 strftime("%Y%m%d",$n)把时间戳转化为格式化字符串,反过来有点麻烦,请有经验的同学,指导一下。最后的做法是直接对比时间那两个字符串,awk提供字符串直接对比。
~$:awk '{printf("%s %s_%s\n",$1,$2,$3)}' file
在jion就能得到这样的文件了
~$:awk '{if($2>$3)printf($0"\n")}' file>last_file

感觉没有什么好总结的了,记着备忘。
end.

读书人网 >操作系统

热点推荐