注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

being23

写给未来的自己

 
 
 

日志

 
 
关于我

真正的坚定,就是找到力量去做自己喜欢的事情,并为之努力,这样才会觉得生活是幸福的。

网易考拉推荐

20130806  

2013-08-06 20:18:50|  分类: work@oppo |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在将日志通过load的方式直接丢进数据库,遇到了两个问题,写了两个脚本来预处理日志

  • 脚本1 用于将结构如下的日志

h1#\t#h2#\t#h3##\t\t##b11#\t#b12#;#b21#\t#b22#;#

改成

h1#\t#h2#\t#h3#\t#b11#\t#b12

h1#\t#h2#\t#h3#\t#b21#\t#b22


#!/bin/bash 

for f in `ls`
do
    sed -r 's/#;#$//' $f | awk -F"##\t\t##"  '{  
        split($2,myarr,"#;#")
            for(i in myarr)  
            {
                print $1 "#\t#" myarr[i]
            } 
        }' > ${f}_bak
done
  • 脚本2 用于将包含非常规字符的行删除

!/bin/bash

for f in ls
do
    awk -F"#\t#" '{
            ch=substr($2,1,1); 
            if(ch~/[a-zA-Z0-9]/) 
                {print $0}
    }' $f > ${f}_bak

done

今天过来发现依然有文件load不进去,检查后发现有个字段的第二个字符是乱码。延续昨天的思路,就想给个正则表达式,对该字段做常规字符检查。奈何能力不够,没成功。后来不知怎么想到会不会是由于字符集的问题导致load失败。查看了数据库的字符集是utf8,日志文件的字符集是latin1。于是写了下面的脚本3

#!/bin/bash

for f in `ls`
do
        iconv -f latin1 -t utf8 $f -o ${f}_bak
done

同事测试后可行。因为日志是从另一台机器上通过rsync同步过来的,所以添加一条在同步之前进行字符集转换的语句。由于iconv需要将转码后的内容写入到另一个文件中,这样就多了一个文件,觉得不爽。要是load的时候能够指明文件的编码就好了,搜索了下找到这个页面LOAD DATA INFILE Syntax ,指定字符集为latin1,load成功。

load data infile '/var/data/022292410.log' into table tmp_tbl character set latin1 fields terminated by '#\t#';
  评论这张
 
阅读(111)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017