使用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 = ;
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统计字段重复实践的更多相关文章
- awk过滤统计不重复的行
awk以‘\t’为分隔符区分列 cat logs | grep IconsendRedirect | grep 1752 | awk -F'\t' '{print $8}'| wc -l awk过滤统 ...
- sqlserver中分区函数 partition by与 group by 区别 删除关键字段重复列
partition by关键字是分析性函数的一部分,它和聚合函数(如group by)不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录, partition by ...
- **SQL某一表中重复某一字段重复记录查询与处理
sql某一表中重复某一字段重复记录查询与处理 1.查询出重复记录 select 重复记录字段 form 数据表 group by houseno having count(重复记录字段)> ...
- python统计元素重复次数
python统计元素重复次数 # !/usr/bin/python3.4 # -*- coding: utf-8 -*- from collections import Counter arr = [ ...
- MyBatis 多表联合查询,字段重复的解决方法
MyBatis 多表联合查询,两张表中字段重复时,在配置文件中,sql语句联合查询时使用字段别名,resultMap中对应的column属性使用相应的别名: <resultMap type=&q ...
- Access删除某一字段重复的数据但是要保留一条
如下图所示,Checktime这个字段有很多重复数据,我需要把所有Checktime这个字段重复的都删掉,但是还需要保留一条: 在Access做删除查询怎么做呀,来个Access高手,复制粘贴党请手下 ...
- mysql 删除单表内多个字段重复的数据
mysql 删除单表内多个字段重复的数据 DELETE from lot_log_payflow WHERE (pay_no,sub_flow_type) in () s1) AND id ) s2) ...
- awk 统计
命令太多,记不住,组合起来用一把…..示例文件: 1 2 3 4 5 6 7 8 9 10 11 [root@lovedan test]# cat a.txt hello good world hel ...
- mysql查询某个字段重复的数据
查询某个字段重复的数据 ; 查询股票重复的营业厅 ;
随机推荐
- git命令常见问题总结
1.git如何放弃所有本地修改 git checkout . #本地所有修改的.没有的提交的,都返回到原来的状态 git stash #把所有没有提交的修改暂存到stash里面.可用git stash ...
- OpenFlow.p4 源码
/* Copyright 2013-present Barefoot Networks, Inc. Licensed under the Apache License, Version 2.0 (th ...
- number_format函数的使用
<!-- ###:表示传入的价格,2:保留两位小数,'.':用点区分, --> <!-- 该函数只支持1.2.4个参数.不能只写3个参数 --> <span>< ...
- Ecplise + Xdebug 一波三折终于能单步调试了
http://my.oschina.net/012345678/blog/152889 Ecplise + Xdebug 一波三折终于能单步调试了 发表于2年前(2013-08-15 15:50) ...
- unity HideInInspector与SerializeField
[HideInInspector]表示将原本显示在面板上的序列化值隐藏起来. [SerializeField]表示将原本不会被序列化的私有变量和保护变量可以序列化,这么他们在下次读取时,就是你上次赋值 ...
- DirectX基础学习系列1
1.3 基础 1.3.1表面 表面接口: IDirect3DSurface9 获得表面信息:GetDesc(D3DSURFACE_DESC) 获得表面接口指针 :LockRect( D3DLO ...
- T-SQL 操作练习
create table Person #新建表格 ( Ids int auto_increment primary key, #主键,自增 Name ) not null, #非空 Age int, ...
- w-BIG TABLE-view+where-small table
w-BIG TABLE DROP PROCEDURE IF EXISTS truncate_insert_sales_rank_toparow_month; DELIMITER /w/ CREATE ...
- MySQL 5.6.3
SHOW VARIABLES LIKE '%version%'; https://dev.mysql.com/doc/refman/5.6/en/explain.html As of MySQL 5. ...
- 搭建一个Flv视频播放服务器
搭建一个Flv视频播放服务器 热度 15已有 11511 次阅读2009-11-2 22:27 |关键词:服务器 视频 flv 播放 文档 错漏 经过一天的努力,查了好多资料,终于搞定了Flv视频服务 ...