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 = ;
FS = "=";
} /(.+)=[[:blank:]]*\[\[.*\]\]/ {
count ++;
print $;
printf("key=%s", $);
if ( keyTimes[$] )
{
keyTimes[$] = keyTimes[$] + ;
}
else
{
keyTimes[$] = ;
}
} END{
print "statistic duplicate ID ends";
printf("count = %d\n", count);
printf("total row NR = %d", NR); for ( key in keyTimes )
{
if (keyTimes[key] > )
{
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

使用awk统计字段重复实践的更多相关文章

  1. awk过滤统计不重复的行

    awk以‘\t’为分隔符区分列 cat logs | grep IconsendRedirect | grep 1752 | awk -F'\t' '{print $8}'| wc -l awk过滤统 ...

  2. sqlserver中分区函数 partition by与 group by 区别 删除关键字段重复列

    partition  by关键字是分析性函数的一部分,它和聚合函数(如group by)不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录, partition  by ...

  3. **SQL某一表中重复某一字段重复记录查询与处理

    sql某一表中重复某一字段重复记录查询与处理   1.查询出重复记录  select 重复记录字段 form  数据表 group by houseno having count(重复记录字段)> ...

  4. python统计元素重复次数

    python统计元素重复次数 # !/usr/bin/python3.4 # -*- coding: utf-8 -*- from collections import Counter arr = [ ...

  5. MyBatis 多表联合查询,字段重复的解决方法

    MyBatis 多表联合查询,两张表中字段重复时,在配置文件中,sql语句联合查询时使用字段别名,resultMap中对应的column属性使用相应的别名: <resultMap type=&q ...

  6. Access删除某一字段重复的数据但是要保留一条

    如下图所示,Checktime这个字段有很多重复数据,我需要把所有Checktime这个字段重复的都删掉,但是还需要保留一条: 在Access做删除查询怎么做呀,来个Access高手,复制粘贴党请手下 ...

  7. mysql 删除单表内多个字段重复的数据

    mysql 删除单表内多个字段重复的数据 DELETE from lot_log_payflow WHERE (pay_no,sub_flow_type) in () s1) AND id ) s2) ...

  8. awk 统计

    命令太多,记不住,组合起来用一把…..示例文件: 1 2 3 4 5 6 7 8 9 10 11 [root@lovedan test]# cat a.txt hello good world hel ...

  9. mysql查询某个字段重复的数据

    查询某个字段重复的数据 ; 查询股票重复的营业厅 ;

随机推荐

  1. pox目录中的交换机mac地址学习模块 l2_multi源码

    # Copyright 2012-2013 James McCauley # # Licensed under the Apache License, Version 2.0 (the "L ...

  2. (转)经典SQL查询语句大全

    (转)经典SQL查询语句大全 一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql s ...

  3. x5设置经典门户登录

    runtime\UIServer\index.jsp   java.lang.String url = request.getContextPath() + "/portal2/proces ...

  4. Windows 下 Nginx + PHP + Xdebug + PHPStorm 调试环境配置

    前期条件:安装好 Nginx.PHP.PHPStorm,使得可以正常访问 一.为 PHP 安装 Xdebug 到 Xdebug 的官网(http://xdebug.org/download.php)下 ...

  5. C++ 中static 使用大全

    /// 静态全局变量 :只能在当前cpp中访问到  static int s_global = 0; void funcA() {      /// 静态局部变量 (函数静态变量) 初始化过一次就不会 ...

  6. php YAF

    Yaf 的特点: 用C语言开发的PHP框架, 相比原生的PHP, 几乎不会带来额外的性能开销. 所有的框架类, 不需要编译, 在PHP启动的时候加载, 并常驻内存. 更短的内存周转周期, 提高内存利用 ...

  7. uiwebview的基本使用

    http://blog.csdn.net/daiyelang/article/details/40989389

  8. Decimal、 Float、 Double 使用

    一.Java 1.float型定义的数据末尾必须 有"f "或"F",为了和double区别.例float x=123.456f,  y=2e20f; publ ...

  9. Linux下编译静态MinGW环境,编译windows平台Qt程序(使用MXE)

    参考链接: MXE.>大多数程序都是在windows平台下开发的程序.windows 在现实中也是绕不过的一个系统平台,做为受过几年VC,MFC”虐待”的程序员,在做为一个程序员之前是一位Lin ...

  10. BAT 遍历文件夹和子文件夹下所有文件

    echo off & color 0A ::指定起始文件夹 set DIR="%cd%" echo DIR=%DIR% :: 参数 /R 表示需要遍历子文件夹,去掉表示不遍 ...