shell脚本 gawk语言 综采话单 对账 字段核对
今天被分配到对账组下的字段程序的了解和修改,在 SecureCRT 下的 run.sh 是字段对账的主程序,其中run.sh文件中含有gawk的代码。 程序的主要功能为 有两个文件夹 source存的是旧的采集系统采集的话单 target是新的采集系统采集的话单 实现具体的话单字段核对步骤为
将source下的所有.txt文件合并为一个话单文件 同理target下文件文件合并
按需要比较的字段 将合并的话单文件提取出核对字段(如主叫号码)
将比较字段排序,目的是比较核对时更加快
执行比较程序 .c文件
对核对后源文件没核对上的进行排序,此文件名同上一步输出文件.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=$"~1"$"~2"$
gsub(/[[:blank:]]*/,"",linebuffer)
#print linebuffer
printf "%-254s%c\n",linebuffer,
}
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=""$"~8"$"~1"$"~2"$"~4"$"~6"$"~11"$"~12"$"~15"$"~30"$"~35"$"~53"$"~54"$
printf "%-510s%c\n",linebuffer,
gsub(/[[:blank:]]*/,"",linebuffer)
}
定长awk
BEGIN{
#FS=","}
{
linebuffer=substr($,,)~substr($,,)
printf "%-510s%c\n",linebuffer,
gsub(/[[:blank:]]*/,"",linebuffer)
}
shell脚本 gawk语言 综采话单 对账 字段核对的更多相关文章
- 利用shell脚本[带注释的]部署单节点多实例es集群(docker版)
文章目录 目录结构 install_docker_es.sh elasticsearch.yml.template 没事写写shell[我自己都不信,如果不是因为工作需要,我才不要写shell],努力 ...
- 将PHP作为Shell脚本语言使用
我们都知道.PHP是一种非常好的动态网页开发语言(速度飞快.开发周期短--).可是仅仅有非常少数的人意识到PHP也能够非常好的作为编写Shell脚本的语言,当PHP作为编写Shell脚本的语言时,他并 ...
- [转]如何将PHP作为Shell脚本语言使用
From : http://www.linuxfly.org/post/559/ 我们都知道,PHP是一种非常好的动态网页开发语言(速度飞快,开发周期短……).但是只有很少数的人意识到PHP也可以很好 ...
- 编写Shell脚本的最佳实践
编写Shell脚本的最佳实践 http://kb.cnblogs.com/page/574767/ 需要记住的 代码有注释 #!/bin/bash # Written by steven # Name ...
- Shell脚本开发规范
一.前言 由于工作需要,最近重新开始拾掇shell脚本.虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看.而且当我在看其他人写的脚本的时候,总觉得难以阅读.毕竟shell脚本这 ...
- 编写Shell脚本的最佳实践,规范二
需要养成的习惯如下: 代码有注释 #!/bin/bash # Written by steven # Name: mysqldump.sh # Version: v1.0 # Parameters : ...
- 编写 Shell 脚本的最佳实践
转自:http://kb.cnblogs.com/page/574767/ 前言 由于工作需要,最近重新开始拾掇shell脚本.虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看 ...
- Shell 脚本编程最佳实践
前言 由于工作需要,最近重新开始拾掇shell脚本.虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看.而且当我在看其他人写的脚本的时候,总觉得难以阅读.毕竟shell脚本这个东 ...
- Shell 脚本实践指南
代码风格规范 开头有"蛇棒" 所谓shebang其实就是在很多脚本的第一行出现的以#!开头的注释,他指明了当我们没有指定解释器的时候默认的解释器,一般可能是下面这样: #!/bin ...
随机推荐
- C#图书资源【更新中...】喜欢的就转存吧
百度分享暂时取消了,需要的朋友可以直接关注我,我发给你. 重点篇 1.C#与.NET3.5高级程序设计 2.C#与.NET3.5高级程序设计.rar 3.Effective_C#_中文版_改善C#程序 ...
- 电脑的基本硬件知识以及unix图解
1.DELL R720 R610 2.电源: 人体心脏3.硬盘: 存数据的地方.机械的性能不高,3.5英寸 性能 SATA 借口<SAS <SSD 价格:SSD> SAS>SA ...
- linux 常用命令;
bc 计算器 :quit 退出 top 任务管理器 q退出 who 显示在线用户 whoami 当前操作用户 kill id 结束当前进程 ifconfig 显示当前网络状态 clear 清屏 vim ...
- Qml一些技巧
1.从ListView中获取当前选中项 myList.currentItem.children[0].text 可以获取ListView的选择项的一个个元素.注意children的使用.
- socket.io遇到的问题
一.socket.io指定客户端html文件所用到的sendFile()方法中的文件路径必须是绝对路径,而且要符合一定规则: app.get('/',function(req,res){ res.se ...
- Prime Palindromes
题目大意:求出区间[a,b]之间的回文质数. a<=b<=10^8; 解题过程: 1.先打个素数表,新学了个 欧拉筛法,是对普通筛法的改进.普通筛法是每找到一个素数,就把它的所有倍数标记成 ...
- js用正则表达式控制价格输入
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...
- android 判断网络是否连接
package com.liucanwen.baidulocation.util; import android.app.Activity; import android.content.Contex ...
- [转]AndroidManifest.xml文件详解
转自:http://www.cnblogs.com/greatverve/archive/2012/05/08/AndroidManifest-xml.html AndroidManifest.xml ...
- 记录一些容易忘记的属性 -- UIImageView
UIImage *image = [UIImage imageNamed:@"back2.jpg"]; //创建一个图片对象,这个方法如果图片名称相同,不管我们调用多少次,得到的 ...