awk处理之案例二: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堪称瑞士军刀绝不为过。
本系列文章均系笔者所写,难免有一些错误或者纰漏,如果小伙伴们有好的建议或者更好的算法,请不吝赐教。
正文
【场景】
现在有两个文本a.txt, b.txt,里面包含的内容如下所示。现在要提取出b中匹配到a的信息,就是第一列基因名相同,第二列NM号也相同的信息,输出a文件的该行到C文件并加上一列“0”,如果b的文件存在a没有的NM号,则把该NM号加进去,并标识为1
a.txt文本内容如下:
ABCC9 NM_005691.2 N
ABCC9 NM_020297.2 Y
ACE NM_000789.3 Y
ADD1 NM_001119.4 N
ADD1 NM_014189.3 Y
b.txt文本内容如下:
ABCC9 NM_020297
ACE NM_000789
ACER1 NM_133492
ACE2 NM_021804
ADD1 NM_001119.4
ADD1 NM_014189.3
ADD1 NM_014190.3
ADD2 NM_001185055.1
提取完之后,c.txt文本内容如下:
ABCC9 NM_020297 1
ACE NM_000789 1
ACER1 NM_133492 1
ACE2 NM_021804 1
ADD1 NM_001119.4 N 0
ADD1 NM_014189.3 Y 0
ADD1 NM_014190.3 1
ADD2 NM_001185055.1 1
【代码】
# extract txt line from a.txt that also in b.txt
# grammer: awk -test.awk a.txt b.txt
{
if(NR==FNR)
{
a[$1$2]=$0
next
}
if($1$2 in a)
{
print a[$1$2]" 0"
}
else
{
print $0" 1"
}
}
【解释】
NR是工作中的记录数;FNR是当前输入文件的记录上。
当输入一个文件时,NR和FNR输出是一样的;当输入2个以上文件时,NR和FNR输出是不一样的。例如:
# awk '{print NR,$0}' file1 file2
1 a b c d
2 a b d c
3 a c b d
4 aa bb cc dd
5 aa bb dd cc
6 aa cc bb dd
# awk '{print FNR,$0}' file1 file2
1 a b c d
2 a b d c
3 a c b d
1 aa bb cc dd
2 aa bb dd cc
3 aa cc bb dd
上面语句的意思是,当NR和FNR相等的时,即第一个文件的内容全部存储到a当中。底下两个判断,如果是遍历a,b文件中所有行,如果在a当中则输出一种格式,如果不在a当中则输出另外一种格式。
【测试】
作者
出处:http://www.cnblogs.com/gina
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
awk处理之案例二:awk匹配文本的更多相关文章
- Shell基础(六):使用awk提取文本、awk处理条件、awk综合脚本应用、awk流程控制、awk扩展应用
一.使用awk提取文本 目标: 本案例要求使用awk工具完成下列过滤任务: 1> 练习awk工具的基本用法 2> 提取本机的IP地址.根分区使用率 3> 格式化输出/et ...
- awk命令详解二
awk命令详解 简单使用: awk :对于文件中一行行的独处来执行操作 . awk -F :'{print $1,$4}' :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 . 详细介绍: ...
- gawk(awk)的用法案例
gawk(awk)的用法案例 本文首先简单介绍一个gawk和awk的区别,然后是一点基本使用流程,最后是自己做的一个分析数据文件的脚本代码,供大家参考.另外想了解基本流程的入门知识的可以下载附件pdf ...
- awk、sed、grep三大shell文本处理工具之awk的应用
awk 1.是什么 是一个编程语言.支持变量.数组.函数.流程控制(if...else/for/while) 单行程序语言. 2.工作流程 读取file.标准输入.管道给的数据,从第一行开始读取,逐行 ...
- 正则表达式以及sed,awk用法 附带案例
则表达式 基本正则 ^ $ [ ] [^] . * \{n,m\} \{n,\} \(ro\)\{2\} \(\) 扩展正则 egrep grep - ...
- awk、sed、grep三大shell文本处理工具之grep的应用
1.基本格式grep pattern [file...](1)grep 搜索字符串 [filename](2)grep 正则表达式 [filename]在文件中搜索所有 pattern 出现的位置, ...
- 【转】Awk 命令学习总结、AWk命令系列学习(linux shell)
前面的话 学习linux 的同人,都知道linux shell文本处理能力非常强大.有一组强大的文本处理工具:grep,sed,awk . 其中grep 经常用作查找匹配文本.sed用作文本编辑替换. ...
- Awk 命令学习总结、AWk命令系列学习(linux shell)
AWK基本语法 下面没有提到awk命令怎么使用了,你可以通过 运行:awk –h 查询到所有命令及参数!下面把awk作为一门语言分节介绍. linux awk 内置变量使用介绍 awk语言中,怎么 ...
- 2.HTML案例二 头条页面
4 HTML案例-头条页面 4.1 案例效果 4.2 案例分析 4.2.1 div布局的进阶 想要将div布局成案例效果,首先需要对多个div进行区分,再分别设置每一个div自身的效果. 1)div的 ...
随机推荐
- 测试C#代码执行时间
这个测试方法不是太精确,不过在同等环境下 可以测试下C#代码逻辑的执行性能吧 网上Copy来的. System.Diagnostics.Stopwatch stopwatch = new System ...
- 说明一下JNI 与AIDL
代码在评论中. JNI: 为什么需要JNI: 因为android是由[JAVA & C/C++]组成.Java运行在Dalvik虚拟机中. 没有办法直接访问底层硬件.底层HW相关目前技术一般都 ...
- Android之使用HTTP协议的Get/Post方式向服务器提交数据
1.Get方式 方法:通过拼接url在url后添加相应的数据,如:http://172.22.35.112:8080/videonews/GetInfoServlet?title=霍比特人&t ...
- 关于table元素的认识
表格是网页上最常见的元素,但是,现在对很多刚入行的前端们那是谈table色变.那是为啥?这是表格的框架的简单.明了.在传统的网页中使用没有边框的表格来排版是非常流行.在web标准逐渐深入设计领域以后, ...
- 基于HTML5的可预览多图片Ajax上传
一.关于图片上传什么什么的 在XHTML的时代,我们使用HTML file控件上传图片一次只能上传一张.要一次上传多图,做法是借助于flash.例如swfupload.js.可惜,使用复杂的点,比如f ...
- simplexml_load_string获取xml节点里的属性值
http://stackoverflow.com/questions/14359658/get-xml-attribute-using-simplexml-load-string 问: I am us ...
- [转]linux中强大的screen命令
[转]linux中强大的screen命令 http://pythonorg.diandian.com/post/2012-01-05/40027464147 今天用SCREEN用点生了,有几个功能不知 ...
- python-day3-集合
集合的特性:无序性,唯一性,可嵌套性 1 #创建集合方式 2 s1={11,22}# 直接创建 3 s2=set()#创建空集合 4 s3=set([111,222,333])#转换为集合 1 #集合 ...
- Hough 变换
作用 霍夫变换是常用的图像变换,用于在图像中寻找直线.圆.椭圆等这类具有相同特征的几何图形.在许多应用场合中,都需要实现对特定形状物体的快速定位,而霍夫变换由于其对方向和噪声不敏感,因此在这类应用中发 ...
- php编写验证码
今天学习到了php登录时的验证码,验证码在我们平时的网站建设中是非常重要的,对于放置一些灌水机.脚本攻击是一个很好地策略. 下面是我写的代码: <?php session_start(); // ...