awk 有时确实比较省事,做些简单的文本处理,还是很方便的,在这介绍下两个文件的join的操作。

原始文本

bb.txt

a 10
b 12

cc.txt

a 11
b 13
c 15

awk join主要是用到连个内置的变量 NR,FNR,先看这的区别

awk '{print NR,FNR,$0}' bb.txt cc.txt
1 1 a 10
2 2 b 12
3 1 a 11
4 2 b 13
5 3 c 15

NR是读取所有的行号

FNR读取每个文件的行号索引号,当文件发生变化时,FNR从1开始计算

当NR=FNR时读的是第一个文本,当NR=FNR时读的是第二个文本,那么跟awk读取文件关键的思路就是先读第一个文件,然后匹配第二个文件中是否存在。

awk 'NR==FNR{s[$1]=$2}NR!=FNR{print $0,s[$1]}' bb.txt cc.txt
a 11 10
b 13 12
c 15

这个其实是ccl eft outer join bb,稍微解读一下。

当NR==FNR,其实就是s[a]=10 s[b]=12

当NR!=FNR时,就是$1 也就是a,b为索引,去cc.txt中查找

做全关联时,也就是join时可以用下列方法

awk 'NR==FNR{s[$1]=$2}NR!=FNR && s[$1]{print $0,s[$1]}' bb.txt cc.txt
a 11 10
b 13 12
awk 'NR==FNR{s[$1]=$2}NR!=FNR && $1 in s {print $0,s[$1]}' bb.txt cc.txt
a 11 10
b 13 12

这两种方法其实是一样的。

awk实现join的更多相关文章

  1. grep,sed,cut,awk,join个性特点

    grep 从数据文件中查询/提取出含有特定关键字的行. sed 主要用于对数据文件中特定字符串的替换处理. cut 按照指定的分隔符(-d)剪下选定的列(-f num)或者字符(-c)的内容. awk ...

  2. linux —— shell 编程(文本处理)

    导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 基本文本处理 流编辑器sed aw ...

  3. 提取SQL中用到的表

    dos2unix * for i in `ls` do :}` awk '{print tolower($0)}' "${i}"|grep -Eiw "from" ...

  4. 文本替换sed+字段处理cut,join+awk重新编排字段

    [1]sed工具(Stream Editor)--流编辑器 sed 本身也是一个管线(管道)命令,可以分析 standard input 的啦! 而且 sed 还可以将数据进行取代.删除.新增.截取特 ...

  5. 4、linux-grep awk sed and cuf sort uniq join

    1.grep 1.1 grep [-invc] [--color=auto] '搜寻字符串' filename选项与参数:-i :忽略大小写的不同-n :顺便输出行号-v :显示没有 '搜寻字符串' ...

  6. AWK高级编程 转载

    AWK高级编程 转载 转载自:http://blog.csdn.net/wzhwho/article/details/5513791 1. 程序元素 一个awk 程序是一对以模式(pattern) 与 ...

  7. split function of Perl,Python,Awk

    使用中常用到Perl,Python,AWK,R, 虽然Java,C,C++,Vala也学过但是就是不喜欢,你说怎么办. 看来一辈子脚本的命. Perl @rray = split /PATTERN/, ...

  8. Pyp 替代sed,awk的文本处理工具

    Linux上文本处理工具虽不少,像cut,tr,join,split,paste,sort,uniq,sed,awk这些经典工具让人眼花缭乱,而且都太老了,使用方法都不太人性化,尤其awk,语法简直反 ...

  9. 【转】linux中的cut/tr/join/split/xargs命令

    1. cut命令 cut命令用于从文件或者标准输入中读取内容并截取每一行的特定部分并送到标准输出. 截取的方式有三种:一是按照字符位置,二是按照字节位置,三是使用一个分隔符将一行分割成多个field, ...

随机推荐

  1. Eclipse 开发 jsp

    下载 eclipse EE   注意 是eclipse EE 版本 下载  apache-tomcat-8.0.15 只下载上面二个 从Window -> Preferences -> S ...

  2. 主工程中合并库工程的Manifest文件

    修改project属性文件中的 manifestmerger.enabled=true,就可以实现Android Manifest的合并. 主要用于lib工程和主工程之间. eg: target=an ...

  3. eclipse使用技巧之 //TODO标识

    通常有三种方式去表示你的待办: //TODO 待实现 //XXX 勉强可以工作,但是性能差 //FIXME 代码错误,必须修复. 在task窗口可以查找所有TODO. 使用ctrl + K 去单页面定 ...

  4. 如何使用一个对象而非数组元素为ng-options初始化

    a,是引用,而b是一个和a内容相同的另一个对象, 因此不能通过b直接赋值.如果要这样用,就用 track by xxx.id  ,它的作用是通过id(唯一的)去ng-options做一次检索匹配

  5. Ehcache和Spring整合

    Ehcache是使用Java编写的缓存框架,比较常用的是,整合在Hibernate和MyBatis这种关系型数据库持久框架. 不过现在用NoSQL也比较盛行,要应用Ehcache,整合起来就没法按照那 ...

  6. Android Event

    2016-10-11 http://p.codekk.com/detail/Android/wcy10586/androidEvent https://my.oschina.net/u/191330/ ...

  7. JAVA源码走读(一) HashMap与ArrayList

    HashMap 一.HashMap基本概念: HashMap是基于哈希表的Map接口的实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒 ...

  8. python(30) 获取网页返回的状态码,状态码对应问题查询

    获取访问网页返回的状态码 html = requests.get(Url) respon = html.status_code 以下内容来自于维基百科:点击查看网页 1xx消息 这一类型的状态码,代表 ...

  9. oracle基础备份和还原

    #全库备份 buffer inctype=complete file=c:\mminfo.dmp log=c:\mminfo.log #用户备份:用户mminfo下的所有表 buffer owner= ...

  10. linux 安装beyond compare

    安装好后,在终端运行bcompare  就ok