zoukankan      html  css  js  c++  java
  • shell脚本 gawk语言 综采话单 对账 字段核对

    今天被分配到对账组下的字段程序的了解和修改,在 SecureCRT 下的 run.sh 是字段对账的主程序,其中run.sh文件中含有gawk的代码。 程序的主要功能为 有两个文件夹 source存的是旧的采集系统采集的话单 target是新的采集系统采集的话单 实现具体的话单字段核对步骤为

    1. 将source下的所有.txt文件合并为一个话单文件 同理target下文件文件合并

    2. 按需要比较的字段 将合并的话单文件提取出核对字段(如主叫号码)

    3. 将比较字段排序,目的是比较核对时更加快

    4. 执行比较程序 .c文件

    5. 对核对后源文件没核对上的进行排序,此文件名同上一步输出文件.source同名

    gawk是一种文件合并和处理的工具语言,http://wenku.baidu.com/view/0639c31755270722192ef738.html

                       http://wenku.baidu.com/view/90a872d5360cba1aa811dadc.html  这是gawk手册连接。

    gawk '{v=FILENAME}!a[v]++1' ./source/*.txt  >./source1.txt 
    /*将比较源目录下所有文件合并*/

    其中{}中是要执行的操作action ./为当前目录 就是将./下的source目录下的所有.txt文件合并到./下的source1.txt文件。' ' 里是程序的部分

    gawk -f source.awk source1.txt>source.txt
    /*将比较源文件中需要比较的字段提出生成source.txt(此文件名可以更改),按分隔符用source.awk 按位置提用source_p.awk  */

    其中 -f 的意思指定要执行的命令 在source.awk 文件中 下面是 source.awk的具体代码

    BEGIN {
                #FS="|"
            }
            {
                linebuffer=$4"~1"$5"~2"$6
                gsub(/[[:blank:]]*/,"",linebuffer)
                #print linebuffer
                printf "%-254s%c
    ",linebuffer,0
            }

    BEGIN {}是定义东西的 #FS="|" 是定义了分隔符为"|" 既为用“|”分隔的话单 用分隔符去每行第4 5 6个 中间用~1和~2隔开 gsub函数则使得在所有正则表达式被匹配的时候都发生替换 gsub(regular expression, subsitution string, target string); 这里的 /[[:blank:]]*/ , "" , linebuffer    linebuffer是要操作的字符串 按照正则表达式 用subsitution string 替换 与target string字符串想匹配的字符等。

    sort -n -k1 -t~ target.txt -o target.txt
     /*对比较目标文件 target.txt 进行排序用主关键字段(主叫号码)来排序,这里的主关键字段是规定死的,        主要为了下面比较程序的快捷 */

    substr(a,b,c) a为需要处理的字符串,b为字符串的第几个位置,c为取几个字符

    substr($0,1,20)既为 $0值这一行(本行)(此为按位置分的话单)

    run.sh

    start=`date`
    gawk '{v=FILENAME}!a[v]++1' ./source/*  >./source1.txt #先将source文件夹下的所有文件记录都复制到source1.txt中
    end=`date`
    echo ${start}"---combine source files!---"${end}
    
    start=`date`
    gawk '{v=FILENAME}!a[v]++1' ./target/*  >./target1.txt
    end=`date`
    echo ${start}"---combine target files!---"${end}
    
    start=`date`
    gawk -f source.awk source1.txt>source.txt #用awk截取source1.txt
    end=`date`
    echo ${start}"---deal source fields!---"${end}
    
    start=`date`
    gawk -f source.awk target1.txt>target.txt
    end=`date`
    echo ${start}"---deal target fields!---"${end}
    
    start=`date`
    sort -n -k1 -t~ target.txt -o target.txt
    end=`date`
    echo ${start}"---sort target file---"${end}
    
    start=`date`
    ./show_files source.txt target.txt t1
    end=`date`
    echo ${start}"---compare source target---"${end}
    
    start=`date`
    sort -n -k1 -t~ t1.source -o t1.source
    end=`date`
    echo ${start}"---sort error source files---"${end}
    
    
    echo "it is over"

    source.awk

    BEGIN{FS=","}
    {
    linebuffer="7"$7"~8"$8"~1"$1"~2"$2"~4"$4"~6"$6"~11"$11"~12"$12"~15"$15"~30"$30"~35"$35"~53"$53"~54"$54
    printf "%-510s%c
    ",linebuffer,0
    gsub(/[[:blank:]]*/,"",linebuffer)
    }

    定长awk

    BEGIN{
    #FS=","}
    {
    linebuffer=substr($0,1,5)~substr($0,6,7)
    printf "%-510s%c
    ",linebuffer,0
    gsub(/[[:blank:]]*/,"",linebuffer)
    }
  • 相关阅读:
    BZOJ 1854: [Scoi2010]游戏( 二分图最大匹配 )
    BZOJ 2038: [2009国家集训队]小Z的袜子(hose) ( 莫队 )
    BZOJ 3555: [Ctsc2014]企鹅QQ( hash )
    BZOJ 2226: [Spoj 5971] LCMSum( 数论 )
    BZOJ 3505: [Cqoi2014]数三角形( 组合数 )
    BZOJ 2510: 弱题( 矩阵快速幂 )
    BZOJ 1009: [HNOI2008]GT考试( dp + 矩阵快速幂 + kmp )
    BZOJ 1090: [SCOI2003]字符串折叠( 区间dp )
    HDU 2295 Radar dancing links 重复覆盖
    ZOJ 3209 Treasure Map dancing links
  • 原文地址:https://www.cnblogs.com/weixiaole/p/3219166.html
Copyright © 2011-2022 走看看