awk处理之案例四:sort加awk来过滤文本
编译环境
本系列文章所提供的算法均在以下环境下编译通过。
【脚本编译环境】Federa 8,linux 2.6.35.6-45.fc14.i686
【处理器】 Intel(R) Core(TM)2 Quad CPU Q9400 @ 2.66GHz
【内存】 2025272 kB
前言
awk是脚本中出色的文本处理工具。源码好像也是用C语言写的。本系列会针对不同的案例,用awk来解决我们所要的问题。 为什么会用awk呢?我们当然可以使用C语言或者java语言来对文本 做处理,但每次都要编译会令人发疯的。修改起来也麻烦,正所谓杀鸡焉用牛刀。 而脚本的灵活便捷使得工作变得更加轻松容易。在shell脚本编程中,awk堪称瑞士军刀绝不为过。
本系列文章均系笔者所写,难免有一些错误或者纰漏,如果小伙伴们有好的建议或者更好的算法,请不吝赐教。
正文
【场景】
我有这样一堆数据,这个模式大约3w条
我希望判断出第二个域内重复的选项。然后重复的选项比较第四个域的大小,取出小的输出第一个域,如果相同比较第三个域的大小,同样取出小的输出第一个域,若还是相同则输出第一个,这个该如何写脚本或者awk判断?
a.txt文本内容如下:
11 elex337_u000014 9 0
12 elex337_Golden214 14 0
14 elex337_u000017 9 0
15 elex337_u000019 11 0
16 elex337_u000020 9 0
17 elex337_Lokio 9 0
18 elex337_u000022 19 0
19 elex337_u000023 11 0
20 elex337_u000024 14 0
21 elex337_swordas15 9 0
22 elex337_Koann 19 0
23 elex337_Vylex 26 0
24 elex337_u000028 19 0
25 elex337_u000014 1 0
26 elex337_Golden214 35 1
27 elex337_u000016 0 0
28 elex337_u000017 22 0
29 elex337_u000019 10 0
30 elex337_u000020 11 0
31 elex337_Lokio 9 0
32 elex337_u000022 9 0
33 elex337_u000023 32 0
34 elex337_u000024 9 0
35 elex337_swordas15 22 0
36 elex337_Koann 11 0
37 elex337_Vylex 22 0
39 elex337_u000042 11 0
40 elex337_u000043 10 0
提取完之后,c.txt文本内容如下:
12 elex337_Golden214 14 0
36 elex337_Koann 11 0
17 elex337_Lokio 9 0
21 elex337_swordas15 9 0
25 elex337_u000014 1 0
27 elex337_u000016 0 0
14 elex337_u000017 9 0
29 elex337_u000019 10 0
16 elex337_u000020 9 0
32 elex337_u000022 9 0
19 elex337_u000023 11 0
34 elex337_u000024 9 0
24 elex337_u000028 19 0
39 elex337_u000042 11 0
40 elex337_u000043 10 0
37 elex337_Vylex 22 0
【代码】
sort -k2,2 -k4,4n -k3,3n -k1,1n < infile |awk '!a[$2]++'
【解释】
sort是linux上一个十分强大排序工具。其用法是sort [options][(files)],因为这里只用到字段排序,故就讲一下字段排序的功能。
字母 | 说明 |
b | 忽略开头的空白 |
d | 字典顺序 |
f | 不区分字幕的大小写 |
g | 以一般的符点数字进行比较,只适合用户GNU版本 |
i | 忽略无法打印的字符 |
n | 以整数数字比较 |
r | 倒置排序的顺序 |
-km.n表示从第m个字段的第n个字符开始比较。
awk '!a[$2]++{print}' 是过滤掉重复的。
作者
出处:http://www.cnblogs.com/gina
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
awk处理之案例四:sort加awk来过滤文本的更多相关文章
- shell学习四十天----awk的惊人表现
awk的惊人表现 awk能够胜任差点儿全部的文本处理工作. awk 调用 1.调用awk: 方式一:命令行方式 awk [-F field-separator ] 'commands' inp ...
- gawk(awk)的用法案例
gawk(awk)的用法案例 本文首先简单介绍一个gawk和awk的区别,然后是一点基本使用流程,最后是自己做的一个分析数据文件的脚本代码,供大家参考.另外想了解基本流程的入门知识的可以下载附件pdf ...
- Linux四剑客之awk命令
AWK详解 awk简介 awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK 的确拥有自己的语 ...
- awk处理之案例六:awk根据条件插入文本
编译环境 本系列文章所提供的算法均在以下环境下编译通过. [脚本编译环境]Federa 8,linux 2.6.35.6-45.fc14.i686 [处理器] Intel(R) Core(TM)2 Q ...
- 四剑客(awk)
AWK AWK简介 虽然sed编辑器是非常方便自动修改文本文件的工具,但其也有自身的限制.通常你需要一个用来处理文件中的数据的更高级工具,它能提供一个类编程环境来修改和重新组织文件中的数据.这正是ga ...
- 正则表达式以及sed,awk用法 附带案例
则表达式 基本正则 ^ $ [ ] [^] . * \{n,m\} \{n,\} \(ro\)\{2\} \(\) 扩展正则 egrep grep - ...
- Android实训案例(四)——关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程!
Android实训案例(四)--关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程! 关于2048,我看到很多大神,比如医生,郭神,所以我也研究了一段时间,还好是研究 ...
- Activity有四种加载模式(转)
Activity有四种加载模式: standard singleTop singleTask singleInstance 在多Activity开发中,有可能是自己应用之间的Activity跳转,或者 ...
- 活动 Activity 四种加载模式
singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例.(注意是栈顶,不在栈顶照样创建新实例!) singleTas ...
随机推荐
- 使用Android Studio开发J2SE项目方法
0.前言 最近因为要为项目开发一个底层的Java应用,所以非常偶然的遇到了这样一个问题,过去Eclipse有Java Project而现在手头使用Android Studio并不能直接建立Java应用 ...
- 为什么要用Message Queue
摘录自博客:http://dataunion.org/9307.html?utm_source=tuicool&utm_medium=referral 为什么要用Message Queue 解 ...
- 如何让webapi只返回json格式数据
最近脑子不好用,总记不住事,以前搞过让webapi只返回json格式的数据,今天有人问我又突然想不起了,后来总结一下,备忘一下,大概有下面几种处理方式 1.在WebApiConfig类的Registe ...
- 设计模式之Birdge(桥接)模式
1.出现原因 1.同一个类型,有两个变化的维度(两个维度的抽象:一个抽象部分的抽象,一个实现部分的抽象) 2.如何应对这种“多维度的变化”?如何利用面向对象技术来使得同一类型可以轻松地沿着两个方向变化 ...
- java数组元素的输出
java数组元素的输出 利用Arrays.toString(数组名即可) String[] name = {"Tom", "John", "Nike& ...
- 从一个Activity返回上一个Activity
从一个Activity返回上一个Activity 要求:保留上一个Activity的数据 方法: 第一步:从Activity1转向Activity2时,用startActivityForResult而 ...
- 【Binary Tree Level Order Traversal】cpp
题目: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ri ...
- 【对象模型】C++模版的编译链接过程——编译器真的会检查所有tocken层面的错误么?
模版(template)设计的初衷,是设计一种自动实例化机制,不需要使用者参与,编译器可根据使用者提供的模版参数再套用类的定义来实例化.所谓实例化,除了包含对于程序变量的实例化,即开辟空间并设置某些变 ...
- [转载]Sublime Text 3 搭建 React.js 开发环境
[转载]Sublime Text 3 搭建 React.js 开发环境 Sublime有很强的自定义功能,插件库很庞大,针对新语言插件更新很快,配合使用可以快速搭建适配语言的开发环境. 1. babe ...
- 【Python】多线程编程
1.thread模块 2.threading模块 3.Queue模块与多线程互斥 简介: thread和threading模块允许创建和管理线程,thread模块提供了基本的线程和锁的支持,而thre ...