当前位置: 首页 > news >正文

使用awk统计字段重复实践

awk

awk是一种规格化文件的分析工具, 主要处理对象类似数据库导出的条目文本文件, 其中一行,就对应一个记录,每个记录包含若干个字段。

类似这种文本:

[root@www ~]# last -n 5 <==仅取出前五行
root     pts/1   192.168.1.100  Tue Feb 10 11:21   still logged in
root     pts/1   192.168.1.100  Tue Feb 10 00:46 - 02:28  (01:41)
root     pts/1   192.168.1.100  Mon Feb  9 11:41 - 18:30  (06:48)
dmtsai   pts/1   192.168.1.100  Mon Feb  9 11:41 - 11:41  (00:00)
root     tty1                   Fri Sep  5 14:09 - 14:10  (00:01)

 

本文利用awk工具实现 字段重复的统计功能, 例如某个字段不是主键,但是需要检测其值的重复性。

具体参考资料:

http://www.cnblogs.com/51linux/archive/2012/05/23/2515308.html

http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html

http://www.gnu.org/software/gawk/manual/gawk.html

问题提出

对于一个lua表文件, 为了避免lua表中,新添加的 key = value, 如果key已经在表中存在, 则新添加的条目在其后,则会将前面已经写过的key覆盖掉, 导致key的value值被改变。

例如如下表:

-- 这是个lua table。
luatable = {
--********************START覆盖标签区*****
--********************END 覆盖标签区*******
LANG = [[xxx]],
LANG = [[xxx]]
public_001 = [[ooo]],
public_002 = [[,,,,,]],
public_003 = [[sss]],
public_004 = [[eeee]],

};

方案给出

上面表文件,中包含 每个条目, key = value, 是我们需要处理的目标

但是其中也有表定义行 和 注释行 , 需要在处理过程中舍弃掉。

 

写一个awk文件, testdup.awk, 使用awk调用文件方式执行此文件。

BEGIN{
        print "statistic duplicate ID starts";
        count = 0;
        FS = "=";
}

/(.+)=[[:blank:]]*\[\[.*\]\]/ {
        count ++;
        print $0;
        printf("key=%s", $1);
        if ( keyTimes[$1] )
        {
                keyTimes[$1] = keyTimes[$1] + 1;
        }
        else
        {
                keyTimes[$1] = 1;
        }
}

END{
        print "statistic duplicate ID ends";
        printf("count = %d\n", count);
        printf("total row NR = %d", NR);

    for ( key in keyTimes )
    {
        if (keyTimes[key] > 1 )
        {
            printf("key(%s) duplicated times=%d", key, keyTimes[key]);
        }
    }
}

 

命令行执行:

awk -f testdup.awk lang.conf

 

执行效果:

.......

statistic duplicate ID ends
count = 1986
total row NR = 2289key(LANG ) duplicated times=2

 

相关文章:

  • select自定义小三角样式
  • Shell判断输入是否有效IP和字母
  • InnoDB的B+树索引
  • C/C++内存划分
  • sysbench_memory
  • 今天开始学Pattern Recognition and Machine Learning (PRML),章节5.2-5.3,Neural Networks神经网络训练(BP算法)...
  • cd命令无效
  • SAMBA文件共享服务器
  • Centos 常用命令
  • 禅道项目管理软件
  • 网页视口内广告浮动弹窗
  • 使用DHCP snooping 功能防止DHCP Server仿冒者***(华为交换机)
  • windows下通过Chocolatey安装或升级node.js
  • Python 调用系统命令
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • Android 控件背景颜色处理
  • Android开源项目规范总结
  • Intervention/image 图片处理扩展包的安装和使用
  • JavaScript DOM 10 - 滚动
  • SpringBoot 实战 (三) | 配置文件详解
  • vue总结
  • 阿里研究院入选中国企业智库系统影响力榜
  • 服务器之间,相同帐号,实现免密钥登录
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • ​力扣解法汇总946-验证栈序列
  • #微信小程序:微信小程序常见的配置传值
  • (04)odoo视图操作
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (十一)图像的罗伯特梯度锐化
  • (一)80c52学习之旅-起始篇
  • (一)基于IDEA的JAVA基础12
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转)为C# Windows服务添加安装程序
  • (轉)JSON.stringify 语法实例讲解
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .NET开源项目介绍及资源推荐:数据持久层
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .net下的富文本编辑器FCKeditor的配置方法
  • ??在JSP中,java和JavaScript如何交互?
  • @AliasFor注解
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [Arduino学习] ESP8266读取DHT11数字温湿度传感器数据
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)
  • [BZOJ1877][SDOI2009]晨跑[最大流+费用流]