大数据报文对数工具

来源:互联网 发布:付费ss推荐 知乎 编辑:程序博客网 时间:2024/06/02 00:20

大数据中的报文一般以文件形式存放。比如这样:

AAA|BBBB|123|123|1|2|3|CCC|DDDD|2017-02-01

字段间用竖线分割,这些字段是有实际意义的。在对数时,很难一眼看出某个想要的字段在哪里。

为了方便追查问题,我写了个对数工具,可以从shell里直接把报文对号入座。


首先准备一个配置文件:

/home/hadoop/bin/turndo/census/mesConstruts.conf

内容如下,想对一种数就在里面配置一行。

6|sjxx|收寄信息|邮件ID|邮件条码|邮件号码|邮件种类代码|收寄局代码|寄达局代码|行政区划|邮件备注|收件人手机号码|收件人名字|收件人地址|收件人邮编|寄件人手机号码|寄件人名字|寄件人地址|寄件人邮编|邮件重量|邮件体积|邮件资费|投递段|投递顺序|第一开拆局|大宗编号|内件信息|进口接口时间|收寄日期|收寄来源|收寄局标志|收寄县市代码|收寄地市代码|收寄省份代码|收寄频次|收寄频次截止时刻|收寄频次第几日|收寄单位属性|收寄频次市趟运行时长|寄达局县市|寄达局地市|寄达局省份|寄达局标志|预计市趟进中心局时间35|sjfjlzjb|上机分拣量第一步|邮件条码|所属省|所属地市|所属县市|所属局代码|进出口标志|收寄单位属性|扫描时间|邮件种类|扫描状态|扫描类型|发送时间|发送标志|车间代码|班次代码|台席代码|操作员代码


注意保存的编码格式要和linux系统默认编码格式一样


在/home/hadoop/.bashrc 中 alias一个新的命令:

alias transm=translatetranslate(){ if  [ $# -eq 0 ] ;  then   #声明都能对哪些数   sh /home/hadoop/bin/turndo/census/echo-transm.sh elif [ $# -eq 2 ] ;  then  type=$1  codeline=$2  #读配置文件,通过type找想要的配置  scount=`cat /home/hadoop/bin/turndo/census/mesConstruts.conf |grep '|'$type'|' |wc -l`     if [ $scount != 0 ] ;   then    nameline=`cat /home/hadoop/bin/turndo/census/mesConstruts.conf |grep '|'$type'|'`    #将报文本身和数据字典都以竖线分割    names=(${nameline//|/ })     codes=(${codeline//|/ })    label="`echo $nameline |cut -d '|' -f 3`"    echo $label    xh=0    nm=0    len=${#names[@]}    len=`expr $len - 3`;    for name in "${names[@]}";     do      nm=`expr $nm + 1`;      if [ $nm -gt 2 ] && [ $xh -lt $len ] ;       then        i=`expr $xh + 1`;        k=`expr $xh + 4`;        code=`echo $2 |cut -d '|' -f $i`        aname="`echo $nameline |cut -d '|' -f $k`"        namelen=`echo $aname |awk -F "" '{print NF}'`        codelen=`echo $code |awk -F "" '{print NF}'`        if [ $codelen -lt 1 ] ;         then          code="[got no value]"        fi        if [ $namelen -lt 1 ] ;         then          aname="LOSS BLANK"        fi        echo $xh  ${aname} ":" "${code}"        xh=`expr $xh + 1`;       fi      done  fi fi}

写完别忘了source .bashrc

使用时直接敲击命令transm sjxx "你的报文"  (这个双引号是必须的加,不然不它认为这是一个参数)

实际效果像这样:

声明能对哪些数那里没什么技术含量,加了个自动换行,但效果不怎么好:

/home/hadoop/bin/turndo/census/echo-transm.sh

confcount=`cat /home/hadoop/bin/turndo/census/mesConstruts.conf |wc -l`namefile=`cat /home/hadoop/bin/turndo/census/mesConstruts.conf`i=1last_fid=""echoline=""for line in $namefile;do  fname=`echo $line |cut -d '|' -f 3`  fid=`echo $line |cut -d '|' -f 2`  i=`expr $i + 1`;    echoline=$echoline", "$fname"("$fid")"    #len=`echo $echoline|awk '{print length($0)}'`    #echo $len  len=`expr length "$echoline"`  if [ $len -gt 30 ];   then    echo ${echoline#*,}    echoline=""  fi  last_fid=$fiddoneecho ${echoline#*,}



0 0
原创粉丝点击