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\n",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\n",linebuffer,0
gsub(/[[:blank:]]*/,"",linebuffer)
}

定长awk

BEGIN{
#FS=","}
{
linebuffer=substr($0,1,5)~substr($0,6,7)
printf "%-510s%c\n",linebuffer,0
gsub(/[[:blank:]]*/,"",linebuffer)
}

 

posted on 2013-07-27 10:42  weiguoyuan  阅读(412)  评论(0编辑  收藏  举报

导航