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. 在ASP.NET Web API中使用OData

    http://www.alixixi.com/program/a/2015063094986.shtml 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在A ...

  2. apache 使用 .htaccess 导致500错误

    今天在win主机上配置了一个apache+mysql+php 的环境,一切看似正常了.结果将程序转移过来,打开网站的时候,出现了500错误.于是乎查原因: 首先,怀疑的是连接mysql出错了,找出配置 ...

  3. OpenStack部署工具总结

    目前感觉比较简单直观的部署工具有RDO.devstack.Fuel等: 1. RDO https://openstack.redhat.com/Quickstart REDHAT出品,支持Redhat ...

  4. Lab_3_SysOps_Storage_Linux_v2.5

    System Operations - Lab 3: Managing Storage in AWS (Linux) - 2.5 =================================== ...

  5. 黄聪:C#带cookie模拟登录百度

    #region 同步通过POST方式发送数据 /// <summary> /// 通过POST方式发送数据 /// </summary> /// <param name= ...

  6. osgi笔记

    Bundle-Classpath可以实现内嵌jar. 一个Bundle的Activator不需要进行Export 一个Package中的类被两个ClassLoader加载,包中的Private cla ...

  7. css不常用重要属性

    超出省略号:display:block;white-space:norwrap;overflow:hidden;text-overflow:ellipsis; white-space:norwrap/ ...

  8. day10-rabbitmq

    安装python rabbitMQ module pip instal pika 发布者: #!/usr/bin/env python #coding:utf8 import pika connect ...

  9. Linux系统挂载数据盘

    参考:http://help.aliyun.com/knowledge_detail/5974154.html?spm=5176.788314850.3.2.hUqwXo 1.在阿里云上购买了服务器, ...

  10. CM添加kafka服务

    下载所需的包: 在http://archive.cloudera.com/kafka/parcels/latest/ 选择合适parcel下载: ubuntu14.04的cdh5.5.1对应包 htt ...