awk实际应用:文本合并

简介:

请使用awk命令将如下两份文件中名字相同的两行合并起来

1
2
3
4
5
6
7
8
9
10
[root@localhost ~] # cat 1.txt
韩海林 21岁
海林韩 23岁
韩林海 22岁
林海韩 24岁
[root@localhost ~] # cat 2.txt
韩林海 男
海林韩 男
韩海林 男
林海韩 男

输出效果:

    韩海林 21岁 男 

1
2
3
4
5
[root@localhost ~] # awk 'NR==FNR{a[$1]=$2}NR>FNR{print $0,a[$1]}' 2.txt  1.txt
韩海林 21岁 男
海林韩 23岁 男
韩林海 22岁 男
林海韩 24岁 男
1
2
3
4
5
6
[root@localhost~] # awk 'NR==FNR{a[$1]=$2}NR>FNR{print $0,a[$1]}' 2.txt  1.txt > 3.txt
[root@localhost ~] # cat 3.txt 
韩海林 21岁 男
海林韩 23岁 男
韩林海 22岁 男
林海韩 24岁 男

解释:

在awk里,NR和FNR的含义相近,唯一的区别就是作用范围,NR是所有读取的行信息计数,而FNR是正在读取文件的行信息计数,FNR在文件切换时会从0重新开始计数,所以上述语句的意思是:

NR==FNR   NR最大值为4,FNR值为1-4,以2.txt的第一个数据项为key,$2即第2列为数据组成数组; 

NR>FNR   此时NR=(2.txt的总行数+FNR),NR最大值为8,FNR则重新从1-4计数,判断第一个数据项在不在2.txt数据组成的数组里,如果在,则打印本行加数组项。


NR是英文number of record的简写,就是awk每从文件或输入流中读入一行数据,就把这个变量加一。这个是awk自带的变量。


其他的解释:

NR==FNR{a[$1]=$2}

打开第一个文件2.txt,把文件里面的$2列的内容存入到a[$1]这个数组。

NR>FNR{print $0,a[$1]}

然后打开第二个文件,打印1.txt一行内容,然后打印第一个文件a[$1]数组的内容。


加入if判断,更容易理解,上面的命令省略了;判断1.txt的第一列内容在a数组里面,打印整行内容和a[$1]数组内容;

1
2
3
4
5
[root@localhost ~] # awk 'NR==FNR{a[$1]=$2;next}NR>FNR{if($1 in a)print $0,a[$1]}' 2.txt 1.txt 
韩海林 21岁 男
海林韩 23岁 男
韩林海 22岁 男
林海韩 24岁 男

文件顺序不同,结果也不同;

1
2
3
4
5
[root@localhost ~] # awk 'NR==FNR{a[$1]=$2}NR>FNR{print $0,a[$1]}' 1.txt 2.txt 
韩林海 男 22岁
海林韩 男 23岁
韩海林 男 21岁
林海韩 男 24岁





本文转自 模范生 51CTO博客,原文链接:http://blog.51cto.com/mofansheng/1671764,如需转载请自行联系原作者
目录
相关文章
|
11月前
|
存储 数据采集 JSON
你知道吗?html_table可以提取的不止是表格
`html_table` 是一种强大的工具,不仅用于HTML表格解析,还在现代爬虫技术中发挥重要作用。它可以提取、整合、分析和传输多种类型的关键数据。本文从四个方面探讨其功能:关键数据提取(如财经网站的股票信息)、零散信息整合(如电商网站的产品详情)、数据对比分析(如手机性能参数对比)和数据存储与传输(如转换为CSV/JSON格式)。通过Python代码示例,展示了如何利用代理IP、多线程和自定义请求头提高爬虫效率,实现对复杂网页数据的全面抓取和利用。
376 12
你知道吗?html_table可以提取的不止是表格
|
消息中间件 负载均衡 Kafka
Kafka消费组重新平衡流程
Kafka消费组重新平衡流程
|
10月前
|
存储 固态存储
磁盘和内存的区别
存储特性: • 磁盘:非易失性存储,数据在断电后不会丢失,适合长期存储数据。 • 内存:易失性存储,数据在断电后会丢失,适合临时存储当前运行的程序和数据。 容量: • 磁盘:容量通常较大,从几百GB到数TB不等,适合存储大量的文件和数据。 • 内存:容量相对较小,一般在几GB到几十GB之间,用于提供快速的临时存储空间。 速度: • 磁盘:读写速度较慢,HDD一般在几十MB/s,SSD可以达到几百MB/s甚至数GB/s。 • 内存:读写速度非常快,通常在几十纳秒到几百纳秒之间,能够快速响应CPU的指令。
742 2
|
XML 数据格式
Office Tool Plus v10.10.7.0
Office Tool Plus(简称OTP)是一款微软Office办公软件下载、安装、管理的辅助增强工具。它可以快速自定义部署,在线下载安装 Office 的各个版本,也可以通过已有的离线安装文件来部署Office镜像,同时在安装过程中你可以自由选择安装哪些需要使用的组件, 在安装之后也可以单独来安装某个需要的组件。
432 2
|
Java Python Windows
Python pip 源设置成国内源,阿里云源,清华大学源,最方便的方式,都在这里了
Python pip 源设置成国内源,阿里云源,清华大学源,最方便的方式,都在这里了
82986 1
|
XML JSON API
Restfule
+ 无状态 + 面向资源,即访问地址时使用的是名词形式 + 使用HTTP动词
347 0
|
网络协议 Cloud Native 关系型数据库
【云原生 | 从零开始学Docker】六、如何写出自己的镜像——Docker file
在上一篇文章中其实有一个点我没有说,那就是如何实现两个或者多个容器之间数据共享。
477 0
【云原生 | 从零开始学Docker】六、如何写出自己的镜像——Docker file
|
数据采集 监控 物联网
Serverless与IoT:为智能音响赋能
众所周知,随着网络技术的不断发展,IoT技术也逐渐走进了千家万户,无论是扫地机器人、智能窗帘等智能家居,还是说智能音箱等娱乐设施,IoT技术都变得可见可及,而众多物联网产品中,智能音箱可以说是近几年最火热的设备之一了,无论是小米的小爱同学、百度的小度还是腾讯的9420、阿里的天猫精灵,它们都在努力走进寻常百姓家。
427 0
|
存储 安全
关于快照,你需要知道这6件事
​ 1、什么是快照 ·快照(snapshot)是一种备份方式,打快照就是对某一个磁盘在某一个时间点上的数据进行备份。 ·阿里云快照的原理是通过增量机制快速创建快照 建立第一份快照后,两个快照之间只有数据变化的部分才会被拷贝 手动创建一个 磁盘大小为40 GB 的快照,一般只需要几分钟的时间
20172 0