今天被分配到对账组下的字段程序的了解和修改,在 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手册连接。

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

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

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

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

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

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

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

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

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

run.sh

  1. start=`date`
  2. gawk '{v=FILENAME}!a[v]++1' ./source/* >./source1.txt #先将source文件夹下的所有文件记录都复制到source1.txt中
  3. end=`date`
  4. echo ${start}"---combine source files!---"${end}
  5.  
  6. start=`date`
  7. gawk '{v=FILENAME}!a[v]++1' ./target/* >./target1.txt
  8. end=`date`
  9. echo ${start}"---combine target files!---"${end}
  10.  
  11. start=`date`
  12. gawk -f source.awk source1.txt>source.txt #用awk截取source1.txt
  13. end=`date`
  14. echo ${start}"---deal source fields!---"${end}
  15.  
  16. start=`date`
  17. gawk -f source.awk target1.txt>target.txt
  18. end=`date`
  19. echo ${start}"---deal target fields!---"${end}
  20.  
  21. start=`date`
  22. sort -n -k1 -t~ target.txt -o target.txt
  23. end=`date`
  24. echo ${start}"---sort target file---"${end}
  25.  
  26. start=`date`
  27. ./show_files source.txt target.txt t1
  28. end=`date`
  29. echo ${start}"---compare source target---"${end}
  30.  
  31. start=`date`
  32. sort -n -k1 -t~ t1.source -o t1.source
  33. end=`date`
  34. echo ${start}"---sort error source files---"${end}
  35.  
  36. echo "it is over"

source.awk

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

定长awk

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

shell脚本 gawk语言 综采话单 对账 字段核对的更多相关文章

  1. 利用shell脚本[带注释的]部署单节点多实例es集群(docker版)

    文章目录 目录结构 install_docker_es.sh elasticsearch.yml.template 没事写写shell[我自己都不信,如果不是因为工作需要,我才不要写shell],努力 ...

  2. 将PHP作为Shell脚本语言使用

    我们都知道.PHP是一种非常好的动态网页开发语言(速度飞快.开发周期短--).可是仅仅有非常少数的人意识到PHP也能够非常好的作为编写Shell脚本的语言,当PHP作为编写Shell脚本的语言时,他并 ...

  3. [转]如何将PHP作为Shell脚本语言使用

    From : http://www.linuxfly.org/post/559/ 我们都知道,PHP是一种非常好的动态网页开发语言(速度飞快,开发周期短……).但是只有很少数的人意识到PHP也可以很好 ...

  4. 编写Shell脚本的最佳实践

    编写Shell脚本的最佳实践 http://kb.cnblogs.com/page/574767/ 需要记住的 代码有注释 #!/bin/bash # Written by steven # Name ...

  5. Shell脚本开发规范

    一.前言 由于工作需要,最近重新开始拾掇shell脚本.虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看.而且当我在看其他人写的脚本的时候,总觉得难以阅读.毕竟shell脚本这 ...

  6. 编写Shell脚本的最佳实践,规范二

    需要养成的习惯如下: 代码有注释 #!/bin/bash # Written by steven # Name: mysqldump.sh # Version: v1.0 # Parameters : ...

  7. 编写 Shell 脚本的最佳实践

    转自:http://kb.cnblogs.com/page/574767/ 前言 由于工作需要,最近重新开始拾掇shell脚本.虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看 ...

  8. Shell 脚本编程最佳实践

    前言 由于工作需要,最近重新开始拾掇shell脚本.虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看.而且当我在看其他人写的脚本的时候,总觉得难以阅读.毕竟shell脚本这个东 ...

  9. Shell 脚本实践指南

    代码风格规范 开头有"蛇棒" 所谓shebang其实就是在很多脚本的第一行出现的以#!开头的注释,他指明了当我们没有指定解释器的时候默认的解释器,一般可能是下面这样: #!/bin ...

随机推荐

  1. mysql把查询的结果格式成日期

    SELECT *,FROM_UNIXTIME(addtime, '%Y-%m-%d %H:%i:%S') as riqi FROM `test`

  2. hadoop工作流引擎之azkaban [转]

    介绍 Azkaban是twitter出的一个任务调度系统,操作比Oozie要简单很多而且非常直观,提供的功能比较简单.Azkaban以Flow为执行单元进行定时调度,Flow就是预定义好的由一个或多个 ...

  3. SQL 调试:无法启动 T-SQL 调试。未能附加到 SQL Server 进程

    将 Windows 登录帐户添加为 sysadmin 已经具有 sysadmin 特权的用户必须执行以下命令: sp_addsrvrolemember 'Domain\Name', 'sysadmin ...

  4. Visual Studio 2012中的为创建类时的添加注释模板

    我们往往需要给类添加注释,我们可以把注释块复制出来,放到文件中,然后在需要的时候,复制.粘贴.这样的重复劳动增加了程序员的体力劳动,而VS中给我们提供了项模版,我们只需要在其中修改一点点模版就能达到这 ...

  5. java之socket

    socket系java中网络编程的内容. 1客户端: package com.wtd.socket; import java.io.BufferedReader; import java.io.IOE ...

  6. ros使用RPLIDAR激光雷达

    1.首先下载RPLIDAR的驱动功能包 https://github.com/robopeak/rplidar_ros 2.然后解压放到~/catkin_ws/src目录下 3.执行catkin_ma ...

  7. ROS程序编辑器

    我找到的比较好用的ROS代码编辑器,对于emacs和vim等神级编辑器不能自动补全,对于我这种新手编译出错都是字母打错了, 因此果断回避,找到了一款叫做code blocks的编辑器,在软件中心就能下 ...

  8. 3.5电子书pc显示

    使用svgalib 下载地址:https://launchpad.net/ubuntu/+source/svgalib/1:1.4.3-30svgalib_1.4.3.orig.tar.gzsvgal ...

  9. uboot启动内核(3)

    nand read.jffs2 0x30007FC0 kernel; 从NAND读出内核:从哪读,从kernel分区 放到哪去   -0x30007FC0 nand read.jffs2 0x3000 ...

  10. php 判断是否 是手机访问

    //判断是否属手机 function is_mobile() { $user_agent = $_SERVER['HTTP_USER_AGENT']; $mobile_agents = Array(& ...